Contract Overview
Balance:
0 BTT
BTT Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xdf5c42b5e6c621294499e1cb803de0cef833f1ad1a2252dffefb17fd10efba5b | 0x60a06040 | 11076606 | 204 days 21 hrs ago | 0x56fb3f7d1c1ed4e61aa3af7ea143f8c48be1a02f | IN | Create: BtfsStatus | 0 BTT | 1,069.4799 |
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
BtfsStatus
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at bttcscan.com on 2022-09-01 */ // File: status_flat.sol // File: @openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol) pragma solidity ^0.8.0; /** * @dev Library for reading and writing primitive types to specific storage slots. * * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. * This library helps with reading and writing to such slots without the need for inline assembly. * * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. * * Example usage to set ERC1967 implementation slot: * ``` * contract ERC1967 { * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; * * function _getImplementation() internal view returns (address) { * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; * } * * function _setImplementation(address newImplementation) internal { * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; * } * } * ``` * * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._ */ library StorageSlotUpgradeable { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } } // File: @openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) pragma solidity ^0.8.0; /** * @dev This is the interface that {BeaconProxy} expects of its beacon. */ interface IBeaconUpgradeable { /** * @dev Must return an address that can be used as a delegate call target. * * {BeaconProxy} will check that this address is a contract. */ function implementation() external view returns (address); } // File: @openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol) pragma solidity ^0.8.0; /** * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified * proxy whose upgrades are fully controlled by the current implementation. */ interface IERC1822ProxiableUpgradeable { /** * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation * address. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. */ function proxiableUUID() external view returns (bytes32); } // File: @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol // OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.2; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ``` * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. * @custom:oz-retyped-from bool */ uint8 private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint8 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`. */ modifier initializer() { bool isTopLevelCall = !_initializing; require( (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1), "Initializable: contract is already initialized" ); _initialized = 1; if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original * initialization step. This is essential to configure modules that are added through upgrades and that require * initialization. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. */ modifier reinitializer(uint8 version) { require(!_initializing && _initialized < version, "Initializable: contract is already initialized"); _initialized = version; _initializing = true; _; _initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. */ function _disableInitializers() internal virtual { require(!_initializing, "Initializable: contract is initializing"); if (_initialized < type(uint8).max) { _initialized = type(uint8).max; emit Initialized(type(uint8).max); } } } // File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal onlyInitializing { __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; } // File: @openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol) pragma solidity ^0.8.2; /** * @dev This abstract contract provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. * * _Available since v4.1._ * * @custom:oz-upgrades-unsafe-allow delegatecall */ abstract contract ERC1967UpgradeUpgradeable is Initializable { function __ERC1967Upgrade_init() internal onlyInitializing { } function __ERC1967Upgrade_init_unchained() internal onlyInitializing { } // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1 bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @dev Returns the current implementation address. */ function _getImplementation() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value; } /** * @dev Stores a new address in the EIP1967 implementation slot. */ function _setImplementation(address newImplementation) private { require(AddressUpgradeable.isContract(newImplementation), "ERC1967: new implementation is not a contract"); StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } /** * @dev Perform implementation upgrade * * Emits an {Upgraded} event. */ function _upgradeTo(address newImplementation) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); } /** * @dev Perform implementation upgrade with additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCall( address newImplementation, bytes memory data, bool forceCall ) internal { _upgradeTo(newImplementation); if (data.length > 0 || forceCall) { _functionDelegateCall(newImplementation, data); } } /** * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCallUUPS( address newImplementation, bytes memory data, bool forceCall ) internal { // Upgrades from old implementations will perform a rollback test. This test requires the new // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing // this special case will break upgrade paths from old UUPS implementation to new ones. if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) { _setImplementation(newImplementation); } else { try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) { require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); } catch { revert("ERC1967Upgrade: new implementation is not UUPS"); } _upgradeToAndCall(newImplementation, data, forceCall); } } /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Returns the current admin. */ function _getAdmin() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value; } /** * @dev Stores a new address in the EIP1967 admin slot. */ function _setAdmin(address newAdmin) private { require(newAdmin != address(0), "ERC1967: new admin is the zero address"); StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin; } /** * @dev Changes the admin of the proxy. * * Emits an {AdminChanged} event. */ function _changeAdmin(address newAdmin) internal { emit AdminChanged(_getAdmin(), newAdmin); _setAdmin(newAdmin); } /** * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor. */ bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; /** * @dev Emitted when the beacon is upgraded. */ event BeaconUpgraded(address indexed beacon); /** * @dev Returns the current beacon. */ function _getBeacon() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value; } /** * @dev Stores a new beacon in the EIP1967 beacon slot. */ function _setBeacon(address newBeacon) private { require(AddressUpgradeable.isContract(newBeacon), "ERC1967: new beacon is not a contract"); require( AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()), "ERC1967: beacon implementation is not a contract" ); StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon; } /** * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that). * * Emits a {BeaconUpgraded} event. */ function _upgradeBeaconToAndCall( address newBeacon, bytes memory data, bool forceCall ) internal { _setBeacon(newBeacon); emit BeaconUpgraded(newBeacon); if (data.length > 0 || forceCall) { _functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data); } } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function _functionDelegateCall(address target, bytes memory data) private returns (bytes memory) { require(AddressUpgradeable.isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return AddressUpgradeable.verifyCallResult(success, returndata, "Address: low-level delegate call failed"); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (proxy/utils/UUPSUpgradeable.sol) pragma solidity ^0.8.0; /** * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. * * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing * `UUPSUpgradeable` with a custom implementation of upgrades. * * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. * * _Available since v4.1._ */ abstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable { function __UUPSUpgradeable_init() internal onlyInitializing { } function __UUPSUpgradeable_init_unchained() internal onlyInitializing { } /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment address private immutable __self = address(this); /** * @dev Check that the execution is being performed through a delegatecall call and that the execution context is * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to * fail. */ modifier onlyProxy() { require(address(this) != __self, "Function must be called through delegatecall"); require(_getImplementation() == __self, "Function must be called through active proxy"); _; } /** * @dev Check that the execution is not being performed through a delegate call. This allows a function to be * callable on the implementing contract but not through proxies. */ modifier notDelegated() { require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall"); _; } /** * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the * implementation. It is used to validate that the this implementation remains valid after an upgrade. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier. */ function proxiableUUID() external view virtual override notDelegated returns (bytes32) { return _IMPLEMENTATION_SLOT; } /** * @dev Upgrade the implementation of the proxy to `newImplementation`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. */ function upgradeTo(address newImplementation) external virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, new bytes(0), false); } /** * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call * encoded in `data`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. */ function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, data, true); } /** * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by * {upgradeTo} and {upgradeToAndCall}. * * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. * * ```solidity * function _authorizeUpgrade(address) internal override onlyOwner {} * ``` */ function _authorizeUpgrade(address newImplementation) internal virtual; /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: contracts/status.sol pragma solidity ^0.8.4; // Open Zeppelin libraries for controlling upgradability and access. // BtfsStatus for hosts' heartbeat report contract BtfsStatus is Initializable, UUPSUpgradeable, OwnableUpgradeable{ using SafeMath for uint256; // map[peer]info struct info { uint32 createTime; string version; uint32 lastNonce; uint32 lastSignedTime; bytes lastSigned; uint16[30] hearts; } mapping(string => info) private peerMap; // sign address address currentSignAddress; address[20] currentSignAddressList; // version string public currentVersion; event signAddressChanged(address lastSignAddress, address currentSignAddress); event versionChanged(string currentVersion, string version); event statusReported(string peer, uint32 createTime, string version, uint32 Nonce, address bttcAddress, uint32 signedTime, uint32 lastNonce, uint32 nowTime, uint16[30] hearts); // stat struct statistics { uint64 total; uint64 totalUsers; } statistics public totalStat; // initialize function initialize(address signAddress) public initializer { currentSignAddress = signAddress; __Ownable_init(); } ///@dev required by the OZ UUPS module function _authorizeUpgrade(address) internal override onlyOwner {} // set sign address, only owner do it function setSignAddress(address addr) public onlyOwner { emit signAddressChanged(currentSignAddress, addr); currentSignAddress = addr; } // get sign address, only owner do it function getSignAddress() public view onlyOwner returns (address) { return (currentSignAddress); } // set current version, only owner do it function setCurrentVersion(string memory ver) public onlyOwner { emit versionChanged(currentVersion, ver); currentVersion = ver; } // get host when score = 8.0 function getHighScoreHost() external returns(info[] memory) {} function getStatus(string memory peer) external view returns(string memory, uint32, string memory, uint32, uint32, bytes memory, uint16[30] memory) { if (peerMap[peer].lastNonce == 0) { uint16[30] memory hearts; bytes memory s; return ("", 0, "", 0, 0, s, hearts); } else { info memory node = peerMap[peer]; return (peer, node.createTime, node.version, node.lastNonce, node.lastSignedTime, node.lastSigned, node.hearts); } } // set heart, max idle days = 10 function setHeart(string memory peer, uint32 Nonce, uint32 nowTime) internal { uint32 diffTime = nowTime - peerMap[peer].lastSignedTime; if (diffTime > 30 * 86400) { diffTime = 30 * 86400; } uint32 diffDays = diffTime / 86400; uint32 diffNonce = Nonce - peerMap[peer].lastNonce; if (diffDays > 0 && diffNonce > diffDays * 24) { diffNonce = diffDays * 24; } uint32 balanceNum = diffNonce; // 1.set new (diffDays-1) average Nonce; (it is alse reset 0 for more than 30 days' diffDays) for (uint32 i = 1; i < diffDays; i++) { uint indexTmp = ((nowTime - i * 86400) / 86400) % 30; peerMap[peer].hearts[indexTmp] = uint16(diffNonce/diffDays); balanceNum = balanceNum - diffNonce/diffDays; } // 2.set today balanceNum uint index = (nowTime / 86400) % 30; peerMap[peer].hearts[index] += uint16(balanceNum); } // report status function reportStatus(string memory peer, uint32 createTime, string memory version, uint32 Nonce, address bttcAddress, uint32 signedTime, bytes memory signed) external { require(0 < createTime, "reportStatus: Invalid createTime"); require(0 < Nonce, "reportStatus: Invalid Nonce"); require(0 < signedTime, "reportStatus: Invalid signedTime"); require(0 < signed.length, "reportStatus: Invalid signed"); require(peerMap[peer].lastNonce < Nonce, "reportStatus: Invalid lastNonce<Nonce"); // verify input param with the signed data. bytes32 hash = genHash(peer, createTime, version, Nonce, bttcAddress, signedTime); require( recoverSigner(hash, signed) == currentSignAddress, "reportStatus: Invalid signed address."); // only bttcAddress is sender, to report status require(bttcAddress == msg.sender, "reportStatus: Invalid msg.sender"); uint32 lastNonce = peerMap[peer].lastNonce; uint32 nowTime = uint32(block.timestamp); uint index = (nowTime / 86400) % 30; // first report if (peerMap[peer].lastNonce == 0) { uint32 initNonce = Nonce; if (initNonce > 24) { initNonce = 24; } peerMap[peer].hearts[index] = uint16(initNonce); totalStat.totalUsers += 1; totalStat.total += 1; } else { require(nowTime-signedTime <= 86400, "reportStatus: signed time must be within 1 days of the current time."); require(peerMap[peer].createTime == createTime, "reportStatus: Invalid createTime."); setHeart(peer, Nonce, nowTime); totalStat.total += Nonce - peerMap[peer].lastNonce; } peerMap[peer].createTime = createTime; peerMap[peer].version = version; peerMap[peer].lastNonce = Nonce; peerMap[peer].lastSignedTime = signedTime; peerMap[peer].lastSigned = signed; emitStatusReported( peer, createTime, version, Nonce, bttcAddress, signedTime, lastNonce, uint32(block.timestamp) ); } function emitStatusReported(string memory peer, uint32 createTime, string memory version, uint32 Nonce, address bttcAddress, uint32 signedTime, uint32 lastNonce, uint32 nowTime) internal { uint16[30] memory hearts = peerMap[peer].hearts; emit statusReported( peer, createTime, version, Nonce, bttcAddress, signedTime, lastNonce, nowTime, hearts ); } function recoverSigner(bytes32 hash, bytes memory sig) internal pure returns (address) { (uint8 v, bytes32 r, bytes32 s) = splitSignature(sig); return ecrecover(hash, v+27, r, s); } function splitSignature(bytes memory sig) internal pure returns (uint8, bytes32, bytes32) { require(sig.length == 65); bytes32 r; bytes32 s; uint8 v; assembly { // first 32 bytes, after the length prefix r := mload(add(sig, 32)) // second 32 bytes s := mload(add(sig, 64)) // final byte (first byte of the next 32 bytes) v := byte(0, mload(add(sig, 96))) } return (v, r, s); } function genHash(string memory peer, uint32 createTime, string memory version, uint32 Nonce, address bttcAddress, uint32 signedTime) internal pure returns (bytes32) { bytes memory data = abi.encode(peer, createTime, version, Nonce, bttcAddress, signedTime); return keccak256(abi.encode("\x19Ethereum Signed Message:\n", data.length, data)); } // call from external function genHashExt(string memory peer, uint32 createTime, string memory version, uint32 Nonce, address bttcAddress, uint32 signedTime) external pure returns (bytes32) { return genHash(peer, createTime, version, Nonce, bttcAddress, signedTime); } // call from external function recoverSignerExt(bytes32 hash, bytes memory sig) external pure returns (address) { (uint8 v, bytes32 r, bytes32 s) = splitSignature(sig); return ecrecover(hash, v+27, r, s); } }
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lastSignAddress","type":"address"},{"indexed":false,"internalType":"address","name":"currentSignAddress","type":"address"}],"name":"signAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"peer","type":"string"},{"indexed":false,"internalType":"uint32","name":"createTime","type":"uint32"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint32","name":"Nonce","type":"uint32"},{"indexed":false,"internalType":"address","name":"bttcAddress","type":"address"},{"indexed":false,"internalType":"uint32","name":"signedTime","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"lastNonce","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"nowTime","type":"uint32"},{"indexed":false,"internalType":"uint16[30]","name":"hearts","type":"uint16[30]"}],"name":"statusReported","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"currentVersion","type":"string"},{"indexed":false,"internalType":"string","name":"version","type":"string"}],"name":"versionChanged","type":"event"},{"inputs":[],"name":"currentVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"peer","type":"string"},{"internalType":"uint32","name":"createTime","type":"uint32"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint32","name":"Nonce","type":"uint32"},{"internalType":"address","name":"bttcAddress","type":"address"},{"internalType":"uint32","name":"signedTime","type":"uint32"}],"name":"genHashExt","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getHighScoreHost","outputs":[{"components":[{"internalType":"uint32","name":"createTime","type":"uint32"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint32","name":"lastNonce","type":"uint32"},{"internalType":"uint32","name":"lastSignedTime","type":"uint32"},{"internalType":"bytes","name":"lastSigned","type":"bytes"},{"internalType":"uint16[30]","name":"hearts","type":"uint16[30]"}],"internalType":"struct BtfsStatus.info[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getSignAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"peer","type":"string"}],"name":"getStatus","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint16[30]","name":"","type":"uint16[30]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSignerExt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"peer","type":"string"},{"internalType":"uint32","name":"createTime","type":"uint32"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint32","name":"Nonce","type":"uint32"},{"internalType":"address","name":"bttcAddress","type":"address"},{"internalType":"uint32","name":"signedTime","type":"uint32"},{"internalType":"bytes","name":"signed","type":"bytes"}],"name":"reportStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ver","type":"string"}],"name":"setCurrentVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStat","outputs":[{"internalType":"uint64","name":"total","type":"uint64"},{"internalType":"uint64","name":"totalUsers","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613fc96100816000396000818161082f015281816108be015281816109f201528181610a810152610b310152613fc96000f3fe6080604052600436106100fe5760003560e01c80636846874d116100955780639d888e86116100645780639d888e8614610307578063a6a83a0914610332578063c4d66de81461036f578063e77fdbb314610398578063f2fde38b146103c3576100fe565b80636846874d1461025f578063715018a61461028857806375839f3a1461029f5780638da5cb5b146102dc576100fe565b80633659cfe6116100d15780633659cfe6146101c357806338b88cb1146101ec5780634f1ef2861461021857806352d1902d14610234576100fe565b806313930cf614610103578063151370451461012c5780631a82de771461015557806322b05ed214610180575b600080fd5b34801561010f57600080fd5b5061012a60048036038101906101259190612526565b6103ec565b005b34801561013857600080fd5b50610153600480360381019061014e9190612414565b610448565b005b34801561016157600080fd5b5061016a6104ef565b6040516101779190612e64565b60405180910390f35b34801561018c57600080fd5b506101a760048036038101906101a29190612526565b610521565b6040516101ba9796959493929190613071565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190612414565b61082d565b005b3480156101f857600080fd5b506102016109b6565b60405161020f9291906133f0565b60405180910390f35b610232600480360381019061022d9190612441565b6109f0565b005b34801561024057600080fd5b50610249610b2d565b6040516102569190612eca565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190612634565b610be6565b005b34801561029457600080fd5b5061029d61130e565b005b3480156102ab57600080fd5b506102c660048036038101906102c1919061256f565b611322565b6040516102d39190612eca565b60405180910390f35b3480156102e857600080fd5b506102f161133e565b6040516102fe9190612e64565b60405180910390f35b34801561031357600080fd5b5061031c611368565b6040516103299190612f45565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906124ca565b6113f6565b6040516103669190612e64565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612414565b611471565b005b3480156103a457600080fd5b506103ad6115f1565b6040516103ba9190612ea8565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190612414565b6115f6565b005b6103f461167a565b7f80af6bbb3cb9aa0aad01eae48ff867ec029bd4a463b03ad7426f9508b2eaac8160df826040516104269291906130f6565b60405180910390a18060df9080519060200190610444929190612194565b5050565b61045061167a565b7f799687174e9d4c0b0c3552621923bcfe3569533db0b1ade3cd8192bc8f854b3760ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516104a3929190612e7f565b60405180910390a18060ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006104f961167a565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060006060600080606061053461221a565b600060c9896040516105469190612e4d565b908152602001604051809103902060020160009054906101000a900463ffffffff1663ffffffff1614156105c35761057c61221a565b606060008060008385604051806020016040528060008152509493929190604051806020016040528060008152509392919098509850985098509850985098505050610822565b600060c9896040516105d59190612e4d565b90815260200160405180910390206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182018054610624906137bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610650906137bf565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b505050505081526020016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600382018054610702906137bf565b80601f016020809104026020016040519081016040528092919081815260200182805461072e906137bf565b801561077b5780601f106107505761010080835404028352916020019161077b565b820191906000526020600020905b81548152906001019060200180831161075e57829003601f168201915b5050505050815260200160048201601e806020026040519081016040528092919082601e80156107e8576020028201916000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116107af5790505b505050505081525050905088816000015182602001518360400151846060015185608001518660a001519750975097509750975097509750505b919395979092949650565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b39061316d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fb6116f8565b73ffffffffffffffffffffffffffffffffffffffff1614610951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906131cd565b60405180910390fd5b61095a8161174f565b6109b381600067ffffffffffffffff8111156109795761097861393c565b5b6040519080825280601f01601f1916602001820160405280156109ab5781602001600182028036833780820191505090505b50600061175a565b50565b60e08060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16905082565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a769061316d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610abe6116f8565b73ffffffffffffffffffffffffffffffffffffffff1614610b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0b906131cd565b60405180910390fd5b610b1d8261174f565b610b298282600161175a565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906131ed565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b8563ffffffff16600010610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c26906133b0565b60405180910390fd5b8363ffffffff16600010610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f906131ad565b60405180910390fd5b8163ffffffff16600010610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613350565b60405180910390fd5b8051600010610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc9061326d565b60405180910390fd5b8363ffffffff1660c988604051610d1c9190612e4d565b908152602001604051809103902060020160009054906101000a900463ffffffff1663ffffffff1610610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b9061324d565b60405180910390fd5b6000610d948888888888886118d7565b905060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610dd9828461193d565b73ffffffffffffffffffffffffffffffffffffffff1614610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e269061314d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490613390565b60405180910390fd5b600060c989604051610eaf9190612e4d565b908152602001604051809103902060020160009054906101000a900463ffffffff16905060004290506000601e6201518083610eeb9190613643565b610ef5919061384f565b63ffffffff169050600060c98c604051610f0f9190612e4d565b908152602001604051809103902060020160009054906101000a900463ffffffff1663ffffffff16141561105357600088905060188163ffffffff161115610f5657601890505b8060c98d604051610f679190612e4d565b908152602001604051809103902060040183601e8110610f8a57610f8961390d565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600160e060000160088282829054906101000a900467ffffffffffffffff16610fd891906135ce565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160e060000160008282829054906101000a900467ffffffffffffffff1661102791906135ce565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506111c5565b62015180868361106391906136b2565b63ffffffff1611156110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906132ad565b60405180910390fd5b8963ffffffff1660c98c6040516110c19190612e4d565b908152602001604051809103902060000160009054906101000a900463ffffffff1663ffffffff1614611129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111209061318d565b60405180910390fd5b6111348b89846119b8565b60c98b6040516111449190612e4d565b908152602001604051809103902060020160009054906101000a900463ffffffff168861117191906136b2565b63ffffffff1660e060000160008282829054906101000a900467ffffffffffffffff1661119e91906135ce565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b8960c98c6040516111d69190612e4d565b908152602001604051809103902060000160006101000a81548163ffffffff021916908363ffffffff1602179055508860c98c6040516112169190612e4d565b9081526020016040518091039020600101908051906020019061123a929190612194565b508760c98c60405161124c9190612e4d565b908152602001604051809103902060020160006101000a81548163ffffffff021916908363ffffffff1602179055508560c98c60405161128c9190612e4d565b908152602001604051809103902060020160046101000a81548163ffffffff021916908363ffffffff1602179055508460c98c6040516112cc9190612e4d565b908152602001604051809103902060030190805190602001906112f092919061223d565b506113018b8b8b8b8b8b8942611c38565b5050505050505050505050565b61131661167a565b6113206000611d13565b565b60006113328787878787876118d7565b90509695505050505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60df8054611375906137bf565b80601f01602080910402602001604051908101604052809291908181526020018280546113a1906137bf565b80156113ee5780601f106113c3576101008083540402835291602001916113ee565b820191906000526020600020905b8154815290600101906020018083116113d157829003601f168201915b505050505081565b60008060008061140585611dd9565b925092509250600186601b8561141b919061360c565b84846040516000815260200160405260405161143a9493929190612ee5565b6020604051602081039080840390855afa15801561145c573d6000803e3d6000fd5b50505060206040510351935050505092915050565b60008060019054906101000a900460ff161590508080156114a25750600160008054906101000a900460ff1660ff16105b806114cf57506114b130611e1c565b1580156114ce5750600160008054906101000a900460ff1660ff16145b5b61150e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115059061322d565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561154b576001600060016101000a81548160ff0219169083151502179055505b8160ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611594611e3f565b80156115ed5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516115e49190612f2a565b60405180910390a15b5050565b606090565b6115fe61167a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561166e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116659061312d565b60405180910390fd5b61167781611d13565b50565b611682611e98565b73ffffffffffffffffffffffffffffffffffffffff166116a061133e565b73ffffffffffffffffffffffffffffffffffffffff16146116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed906132ed565b60405180910390fd5b565b60006117267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611ea0565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61175761167a565b50565b6117867f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611eaa565b60000160009054906101000a900460ff16156117aa576117a583611eb4565b6118d2565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117f057600080fd5b505afa92505050801561182157506040513d601f19601f8201168201806040525081019061181e919061249d565b60015b611860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118579061328d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc9061320d565b60405180910390fd5b506118d1838383611f6d565b5b505050565b6000808787878787876040516020016118f596959493929190612f67565b604051602081830303815290604052905080518160405160200161191a92919061330d565b604051602081830303815290604052805190602001209150509695505050505050565b60008060008061194c85611dd9565b925092509250600186601b85611962919061360c565b8484604051600081526020016040526040516119819493929190612ee5565b6020604051602081039080840390855afa1580156119a3573d6000803e3d6000fd5b50505060206040510351935050505092915050565b600060c9846040516119ca9190612e4d565b908152602001604051809103902060020160049054906101000a900463ffffffff16826119f791906136b2565b905062278d008163ffffffff161115611a115762278d0090505b60006201518082611a229190613643565b9050600060c986604051611a369190612e4d565b908152602001604051809103902060020160009054906101000a900463ffffffff1685611a6391906136b2565b905060008263ffffffff16118015611a925750601882611a839190613674565b63ffffffff168163ffffffff16115b15611aa757601882611aa49190613674565b90505b60008190506000600190505b8363ffffffff168163ffffffff161015611b93576000601e620151808084611adb9190613674565b89611ae691906136b2565b611af09190613643565b611afa919061384f565b63ffffffff1690508484611b0e9190613643565b60c98a604051611b1e9190612e4d565b908152602001604051809103902060040182601e8110611b4157611b4061390d565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055508484611b729190613643565b83611b7d91906136b2565b9250508080611b8b90613822565b915050611ab3565b506000601e6201518087611ba79190613643565b611bb1919061384f565b63ffffffff1690508160c989604051611bca9190612e4d565b908152602001604051809103902060040182601e8110611bed57611bec61390d565b5b601091828204019190066002028282829054906101000a900461ffff16611c149190613596565b92506101000a81548161ffff021916908361ffff1602179055505050505050505050565b600060c989604051611c4a9190612e4d565b9081526020016040518091039020600401601e806020026040519081016040528092919082601e8015611cba576020028201916000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611c815790505b505050505090507febfed14756579dd6c3419c51b35d199e7a08b687258f3e8232ff772aa9dd679c898989898989898989604051611d0099989796959493929190612fd6565b60405180910390a1505050505050505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006041845114611dec57600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e85906133d0565b60405180910390fd5b611e96611f99565b565b600033905090565b6000819050919050565b6000819050919050565b611ebd81611e1c565b611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef3906132cd565b60405180910390fd5b80611f297f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611ea0565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f7683611ffa565b600082511180611f835750805b15611f9457611f928383612049565b505b505050565b600060019054906101000a900460ff16611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf906133d0565b60405180910390fd5b611ff8611ff3611e98565b611d13565b565b61200381611eb4565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b606061205483611e1c565b612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90613370565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516120bb9190612e36565b600060405180830381855af49150503d80600081146120f6576040519150601f19603f3d011682016040523d82523d6000602084013e6120fb565b606091505b50915091506121238282604051806060016040528060278152602001613f6d6027913961212d565b9250505092915050565b6060831561213d5782905061218d565b6000835111156121505782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121849190612f45565b60405180910390fd5b9392505050565b8280546121a0906137bf565b90600052602060002090601f0160209004810192826121c25760008555612209565b82601f106121db57805160ff1916838001178555612209565b82800160010185558215612209579182015b828111156122085782518255916020019190600101906121ed565b5b50905061221691906122c3565b5090565b604051806103c00160405280601e90602082028036833780820191505090505090565b828054612249906137bf565b90600052602060002090601f01602090048101928261226b57600085556122b2565b82601f1061228457805160ff19168380011785556122b2565b828001600101855582156122b2579182015b828111156122b1578251825591602001919060010190612296565b5b5090506122bf91906122c3565b5090565b5b808211156122dc5760008160009055506001016122c4565b5090565b60006122f36122ee8461343e565b613419565b90508281526020810184848401111561230f5761230e613970565b5b61231a84828561377d565b509392505050565b60006123356123308461346f565b613419565b90508281526020810184848401111561235157612350613970565b5b61235c84828561377d565b509392505050565b60008135905061237381613f27565b92915050565b60008135905061238881613f3e565b92915050565b60008151905061239d81613f3e565b92915050565b600082601f8301126123b8576123b761396b565b5b81356123c88482602086016122e0565b91505092915050565b600082601f8301126123e6576123e561396b565b5b81356123f6848260208601612322565b91505092915050565b60008135905061240e81613f55565b92915050565b60006020828403121561242a5761242961397a565b5b600061243884828501612364565b91505092915050565b600080604083850312156124585761245761397a565b5b600061246685828601612364565b925050602083013567ffffffffffffffff81111561248757612486613975565b5b612493858286016123a3565b9150509250929050565b6000602082840312156124b3576124b261397a565b5b60006124c18482850161238e565b91505092915050565b600080604083850312156124e1576124e061397a565b5b60006124ef85828601612379565b925050602083013567ffffffffffffffff8111156125105761250f613975565b5b61251c858286016123a3565b9150509250929050565b60006020828403121561253c5761253b61397a565b5b600082013567ffffffffffffffff81111561255a57612559613975565b5b612566848285016123d1565b91505092915050565b60008060008060008060c0878903121561258c5761258b61397a565b5b600087013567ffffffffffffffff8111156125aa576125a9613975565b5b6125b689828a016123d1565b96505060206125c789828a016123ff565b955050604087013567ffffffffffffffff8111156125e8576125e7613975565b5b6125f489828a016123d1565b945050606061260589828a016123ff565b935050608061261689828a01612364565b92505060a061262789828a016123ff565b9150509295509295509295565b600080600080600080600060e0888a0312156126535761265261397a565b5b600088013567ffffffffffffffff81111561267157612670613975565b5b61267d8a828b016123d1565b975050602061268e8a828b016123ff565b965050604088013567ffffffffffffffff8111156126af576126ae613975565b5b6126bb8a828b016123d1565b95505060606126cc8a828b016123ff565b94505060806126dd8a828b01612364565b93505060a06126ee8a828b016123ff565b92505060c088013567ffffffffffffffff81111561270f5761270e613975565b5b61271b8a828b016123a3565b91505092959891949750929550565b60006127368383612d4b565b905092915050565b600061274a8383612ddc565b60208301905092915050565b61275f816136e6565b82525050565b6000612770826134cf565b61277a8185613515565b93508360208202850161278c856134a0565b8060005b858110156127c857848403895281516127a9858261272a565b94506127b4836134fb565b925060208a01995050600181019050612790565b50829750879550505050505092915050565b6127e3816134da565b6127ed8184613526565b92506127f8826134b0565b8060005b83811015612829578151612810878261273e565b965061281b83613508565b9250506001810190506127fc565b505050505050565b61283a816134da565b6128448184613531565b925061284f826134b0565b8060005b83811015612880578151612867878261273e565b965061287283613508565b925050600181019050612853565b505050505050565b612891816136f8565b82525050565b60006128a2826134e5565b6128ac818561353c565b93506128bc81856020860161378c565b6128c58161397f565b840191505092915050565b60006128db826134e5565b6128e5818561354d565b93506128f581856020860161378c565b6128fe8161397f565b840191505092915050565b6000612914826134e5565b61291e818561355e565b935061292e81856020860161378c565b80840191505092915050565b6129438161376b565b82525050565b6000612954826134f0565b61295e8185613569565b935061296e81856020860161378c565b6129778161397f565b840191505092915050565b600061298d826134f0565b612997818561357a565b93506129a781856020860161378c565b6129b08161397f565b840191505092915050565b60006129c6826134f0565b6129d0818561358b565b93506129e081856020860161378c565b80840191505092915050565b600081546129f9816137bf565b612a03818661357a565b94506001821660008114612a1e5760018114612a3057612a63565b60ff1983168652602086019350612a63565b612a39856134ba565b60005b83811015612a5b57815481890152600182019150602081019050612a3c565b808801955050505b50505092915050565b6000612a7960268361357a565b9150612a8482613990565b604082019050919050565b6000612a9c60258361357a565b9150612aa7826139df565b604082019050919050565b6000612abf602c8361357a565b9150612aca82613a2e565b604082019050919050565b6000612ae260218361357a565b9150612aed82613a7d565b604082019050919050565b6000612b05601b8361357a565b9150612b1082613acc565b602082019050919050565b6000612b28602c8361357a565b9150612b3382613af5565b604082019050919050565b6000612b4b60388361357a565b9150612b5682613b44565b604082019050919050565b6000612b6e60298361357a565b9150612b7982613b93565b604082019050919050565b6000612b91602e8361357a565b9150612b9c82613be2565b604082019050919050565b6000612bb460258361357a565b9150612bbf82613c31565b604082019050919050565b6000612bd7601c8361357a565b9150612be282613c80565b602082019050919050565b6000612bfa602e8361357a565b9150612c0582613ca9565b604082019050919050565b6000612c1d60448361357a565b9150612c2882613cf8565b606082019050919050565b6000612c40602d8361357a565b9150612c4b82613d6d565b604082019050919050565b6000612c6360208361357a565b9150612c6e82613dbc565b602082019050919050565b6000612c86601a8361357a565b9150612c9182613de5565b602082019050919050565b6000612ca960208361357a565b9150612cb482613e0e565b602082019050919050565b6000612ccc60268361357a565b9150612cd782613e37565b604082019050919050565b6000612cef60208361357a565b9150612cfa82613e86565b602082019050919050565b6000612d1260208361357a565b9150612d1d82613eaf565b602082019050919050565b6000612d35602b8361357a565b9150612d4082613ed8565b604082019050919050565b600061046083016000830151612d646000860182612dfa565b5060208301518482036020860152612d7c8282612949565b9150506040830151612d916040860182612dfa565b506060830151612da46060860182612dfa565b5060808301518482036080860152612dbc8282612897565b91505060a0830151612dd160a08601826127da565b508091505092915050565b612de581613702565b82525050565b612df481613730565b82525050565b612e038161373a565b82525050565b612e128161373a565b82525050565b612e218161374a565b82525050565b612e308161375e565b82525050565b6000612e428284612909565b915081905092915050565b6000612e5982846129bb565b915081905092915050565b6000602082019050612e796000830184612756565b92915050565b6000604082019050612e946000830185612756565b612ea16020830184612756565b9392505050565b60006020820190508181036000830152612ec28184612765565b905092915050565b6000602082019050612edf6000830184612888565b92915050565b6000608082019050612efa6000830187612888565b612f076020830186612e27565b612f146040830185612888565b612f216060830184612888565b95945050505050565b6000602082019050612f3f600083018461293a565b92915050565b60006020820190508181036000830152612f5f8184612982565b905092915050565b600060c0820190508181036000830152612f818189612982565b9050612f906020830188612e09565b8181036040830152612fa28187612982565b9050612fb16060830186612e09565b612fbe6080830185612756565b612fcb60a0830184612e09565b979650505050505050565b60006104c0820190508181036000830152612ff1818c612982565b9050613000602083018b612e09565b8181036040830152613012818a612982565b90506130216060830189612e09565b61302e6080830188612756565b61303b60a0830187612e09565b61304860c0830186612e09565b61305560e0830185612e09565b613063610100830184612831565b9a9950505050505050505050565b600061048082019050818103600083015261308c818a612982565b905061309b6020830189612e09565b81810360408301526130ad8188612982565b90506130bc6060830187612e09565b6130c96080830186612e09565b81810360a08301526130db81856128d0565b90506130ea60c0830184612831565b98975050505050505050565b6000604082019050818103600083015261311081856129ec565b905081810360208301526131248184612982565b90509392505050565b6000602082019050818103600083015261314681612a6c565b9050919050565b6000602082019050818103600083015261316681612a8f565b9050919050565b6000602082019050818103600083015261318681612ab2565b9050919050565b600060208201905081810360008301526131a681612ad5565b9050919050565b600060208201905081810360008301526131c681612af8565b9050919050565b600060208201905081810360008301526131e681612b1b565b9050919050565b6000602082019050818103600083015261320681612b3e565b9050919050565b6000602082019050818103600083015261322681612b61565b9050919050565b6000602082019050818103600083015261324681612b84565b9050919050565b6000602082019050818103600083015261326681612ba7565b9050919050565b6000602082019050818103600083015261328681612bca565b9050919050565b600060208201905081810360008301526132a681612bed565b9050919050565b600060208201905081810360008301526132c681612c10565b9050919050565b600060208201905081810360008301526132e681612c33565b9050919050565b6000602082019050818103600083015261330681612c56565b9050919050565b6000606082019050818103600083015261332681612c79565b90506133356020830185612deb565b818103604083015261334781846128d0565b90509392505050565b6000602082019050818103600083015261336981612c9c565b9050919050565b6000602082019050818103600083015261338981612cbf565b9050919050565b600060208201905081810360008301526133a981612ce2565b9050919050565b600060208201905081810360008301526133c981612d05565b9050919050565b600060208201905081810360008301526133e981612d28565b9050919050565b60006040820190506134056000830185612e18565b6134126020830184612e18565b9392505050565b6000613423613434565b905061342f82826137f1565b919050565b6000604051905090565b600067ffffffffffffffff8211156134595761345861393c565b5b6134628261397f565b9050602081019050919050565b600067ffffffffffffffff82111561348a5761348961393c565b5b6134938261397f565b9050602081019050919050565b6000819050602082019050919050565b6000819050919050565b60008190508160005260206000209050919050565b600081519050919050565b6000601e9050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135a182613702565b91506135ac83613702565b92508261ffff038211156135c3576135c2613880565b5b828201905092915050565b60006135d98261374a565b91506135e48361374a565b92508267ffffffffffffffff0382111561360157613600613880565b5b828201905092915050565b60006136178261375e565b91506136228361375e565b92508260ff0382111561363857613637613880565b5b828201905092915050565b600061364e8261373a565b91506136598361373a565b925082613669576136686138af565b5b828204905092915050565b600061367f8261373a565b915061368a8361373a565b92508163ffffffff04831182151516156136a7576136a6613880565b5b828202905092915050565b60006136bd8261373a565b91506136c88361373a565b9250828210156136db576136da613880565b5b828203905092915050565b60006136f182613710565b9050919050565b6000819050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006137768261375e565b9050919050565b82818337600083830152505050565b60005b838110156137aa57808201518184015260208101905061378f565b838111156137b9576000848401525b50505050565b600060028204905060018216806137d757607f821691505b602082108114156137eb576137ea6138de565b5b50919050565b6137fa8261397f565b810181811067ffffffffffffffff821117156138195761381861393c565b5b80604052505050565b600061382d8261373a565b915063ffffffff82141561384457613843613880565b5b600182019050919050565b600061385a8261373a565b91506138658361373a565b925082613875576138746138af565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964207369676e65642061646460008201527f726573732e000000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c69642063726561746554696d6560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964204e6f6e63650000000000600082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964206c6173744e6f6e63653c60008201527f4e6f6e6365000000000000000000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964207369676e656400000000600082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a207369676e65642074696d65206d757374206260008201527f652077697468696e20312064617973206f66207468652063757272656e74207460208201527f696d652e00000000000000000000000000000000000000000000000000000000604082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000600082015250565b7f7265706f72745374617475733a20496e76616c6964207369676e656454696d65600082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964206d73672e73656e646572600082015250565b7f7265706f72745374617475733a20496e76616c69642063726561746554696d65600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b613f30816136e6565b8114613f3b57600080fd5b50565b613f47816136f8565b8114613f5257600080fd5b50565b613f5e8161373a565b8114613f6957600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fa08e372fe5eb095429883f1e0819d115e1e483edd7366ed8fbeead3887063a964736f6c63430008070033
Deployed ByteCode Sourcemap
42268:7995:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43965:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43589:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43799:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44230:521;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;33558:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43226:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;34017:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33236:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45833:2260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21261:103;;;;;;;;;;;;;:::i;:::-;;49753:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20613:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42759:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50048:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43282:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44160:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21519:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43965:153;20499:13;:11;:13::i;:::-;44044:35:::1;44059:14;44075:3;44044:35;;;;;;;:::i;:::-;;;;;;;;44107:3;44090:14;:20;;;;;;;;;;;;:::i;:::-;;43965:153:::0;:::o;43589:159::-;20499:13;:11;:13::i;:::-;43660:44:::1;43679:18;;;;;;;;;;;43699:4;43660:44;;;;;;;:::i;:::-;;;;;;;;43736:4;43715:18;;:25;;;;;;;;;;;;;;;;;;43589:159:::0;:::o;43799:112::-;43856:7;20499:13;:11;:13::i;:::-;43884:18:::1;;;;;;;;;;;43876:27;;43799:112:::0;:::o;44230:521::-;44291:13;44306:6;44314:13;44329:6;44337;44345:12;44359:17;;:::i;:::-;44420:1;44393:7;44401:4;44393:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:28;;;44389:355;;;44438:24;;:::i;:::-;44477:14;44518:1;44525;44528;44531;44534:6;44506:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44389:355;44574:16;44593:7;44601:4;44593:13;;;;;;:::i;:::-;;;;;;;;;;;;;44574:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44629:4;44635;:15;;;44652:4;:12;;;44666:4;:14;;;44682:4;:19;;;44703:4;:15;;;44720:4;:11;;;44621:111;;;;;;;;;;;;;;;44230:521;;;;;;;;;;:::o;33558:200::-;32108:6;32091:23;;32099:4;32091:23;;;;32083:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32206:6;32182:30;;:20;:18;:20::i;:::-;:30;;;32174:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33642:36:::1;33660:17;33642;:36::i;:::-;33689:61;33711:17;33740:1;33730:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33744:5;33689:21;:61::i;:::-;33558:200:::0;:::o;43226:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34017:225::-;32108:6;32091:23;;32099:4;32091:23;;;;32083:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32206:6;32182:30;;:20;:18;:20::i;:::-;:30;;;32174:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34135:36:::1;34153:17;34135;:36::i;:::-;34182:52;34204:17;34223:4;34229;34182:21;:52::i;:::-;34017:225:::0;;:::o;33236:133::-;33314:7;32553:6;32536:23;;32544:4;32536:23;;;32528:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;23534:66:::1;33341:20;;33334:27;;33236:133:::0;:::o;45833:2260::-;46026:10;46022:14;;:1;:14;46014:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46096:5;46092:9;;:1;:9;46084:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;46156:10;46152:14;;:1;:14;46144:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46226:6;:13;46222:1;:17;46214:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46317:5;46291:31;;:7;46299:4;46291:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:31;;;46283:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46430:12;46445:66;46453:4;46459:10;46471:7;46480:5;46487:11;46500:10;46445:7;:66::i;:::-;46430:81;;46562:18;;;;;;;;;;;46531:49;;:27;46545:4;46551:6;46531:13;:27::i;:::-;:49;;;46522:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46717:10;46702:25;;:11;:25;;;46694:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46777:16;46796:7;46804:4;46796:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;46777:42;;46830:14;46854:15;46830:40;;46881:10;46914:2;46905:5;46895:7;:15;;;;:::i;:::-;46894:22;;;;:::i;:::-;46881:35;;;;46985:1;46958:7;46966:4;46958:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:28;;;46954:661;;;47003:16;47022:5;47003:24;;47058:2;47046:9;:14;;;47042:69;;;47093:2;47081:14;;47042:69;47164:9;47127:7;47135:4;47127:13;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;47148:5;47127:27;;;;;;;:::i;:::-;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;47215:1;47191:9;:20;;;:25;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47250:1;47231:9;:15;;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46988:275;46954:661;;;47314:5;47300:10;47292:7;:18;;;;:::i;:::-;:27;;;;47284:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;47443:10;47415:38;;:7;47423:4;47415:13;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;;;;;;;;;;;:38;;;47407:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;47508:30;47517:4;47523:5;47530:7;47508:8;:30::i;:::-;47580:7;47588:4;47580:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;47572:5;:31;;;;:::i;:::-;47553:50;;:9;:15;;;:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46954:661;47654:10;47627:7;47635:4;47627:13;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;;:37;;;;;;;;;;;;;;;;;;47699:7;47675;47683:4;47675:13;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;:31;;;;;;;;;;;;:::i;:::-;;47743:5;47717:7;47725:4;47717:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;:31;;;;;;;;;;;;;;;;;;47790:10;47759:7;47767:4;47759:13;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;:41;;;;;;;;;;;;;;;;;;47838:6;47811:7;47819:4;47811:13;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;:33;;;;;;;;;;;;:::i;:::-;;47857:228;47890:4;47909:10;47934:7;47956:5;47976:11;48002:10;48027:9;48058:15;47857:18;:228::i;:::-;46001:2092;;;;45833:2260;;;;;;;:::o;21261:103::-;20499:13;:11;:13::i;:::-;21326:30:::1;21353:1;21326:18;:30::i;:::-;21261:103::o:0;49753:260::-;49912:7;49939:66;49947:4;49953:10;49965:7;49974:5;49981:11;49994:10;49939:7;:66::i;:::-;49932:73;;49753:260;;;;;;;;:::o;20613:87::-;20659:7;20686:6;;;;;;;;;;;20679:13;;20613:87;:::o;42759:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50048:212::-;50129:7;50155;50164:9;50175;50188:19;50203:3;50188:14;:19::i;:::-;50154:53;;;;;;50225:27;50235:4;50243:2;50241:1;:4;;;;:::i;:::-;50247:1;50250;50225:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50218:34;;;;;50048:212;;;;:::o;43282:138::-;15154:19;15177:13;;;;;;;;;;;15176:14;15154:36;;15224:14;:34;;;;;15257:1;15242:12;;;;;;;;;;:16;;;15224:34;15223:108;;;;15265:44;15303:4;15265:29;:44::i;:::-;15264:45;:66;;;;;15329:1;15313:12;;;;;;;;;;:17;;;15264:66;15223:108;15201:204;;;;;;;;;;;;:::i;:::-;;;;;;;;;15431:1;15416:12;;:16;;;;;;;;;;;;;;;;;;15447:14;15443:67;;;15494:4;15478:13;;:20;;;;;;;;;;;;;;;;;;15443:67;43374:11:::1;43353:18;;:32;;;;;;;;;;;;;;;;;;43396:16;:14;:16::i;:::-;15536:14:::0;15532:102;;;15583:5;15567:13;;:21;;;;;;;;;;;;;;;;;;15608:14;15620:1;15608:14;;;;;;:::i;:::-;;;;;;;;15532:102;15143:498;43282:138;:::o;44160:62::-;44205:13;44160:62;:::o;21519:201::-;20499:13;:11;:13::i;:::-;21628:1:::1;21608:22;;:8;:22;;;;21600:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21684:28;21703:8;21684:18;:28::i;:::-;21519:201:::0;:::o;20778:132::-;20853:12;:10;:12::i;:::-;20842:23;;:7;:5;:7::i;:::-;:23;;;20834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20778:132::o;23815:153::-;23868:7;23895:59;23534:66;23933:20;;23895:37;:59::i;:::-;:65;;;;;;;;;;;;23888:72;;23815:153;:::o;43472:66::-;20499:13;:11;:13::i;:::-;43472:66;:::o;25233:992::-;25687:53;23186:66;25725:14;;25687:37;:53::i;:::-;:59;;;;;;;;;;;;25683:535;;;25763:37;25782:17;25763:18;:37::i;:::-;25683:535;;;25866:17;25837:61;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25833:306;;26067:56;;;;;;;;;;:::i;:::-;;;;;;;;25833:306;23534:66;25959:20;;25951:4;:28;25943:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;25901:140;26153:53;26171:17;26190:4;26196:9;26153:17;:53::i;:::-;25683:535;25233:992;;;:::o;49353:365::-;49509:7;49529:17;49560:4;49566:10;49578:7;49587:5;49594:11;49607:10;49549:69;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49529:89;;49691:4;:11;49704:4;49646:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49636:74;;;;;;49629:81;;;49353:365;;;;;;;;:::o;48607:209::-;48685:7;48711;48720:9;48731;48744:19;48759:3;48744:14;:19::i;:::-;48710:53;;;;;;48781:27;48791:4;48799:2;48797:1;:4;;;;:::i;:::-;48803:1;48806;48781:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48774:34;;;;;48607:209;;;;:::o;44799:1004::-;44887:15;44915:7;44923:4;44915:13;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;;;;;;;;;;44905:7;:38;;;;:::i;:::-;44887:56;;44969:10;44958:8;:21;;;44954:75;;;45007:10;44996:21;;44954:75;45039:15;45068:5;45057:8;:16;;;;:::i;:::-;45039:34;;45086:16;45113:7;45121:4;45113:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;45105:5;:31;;;;:::i;:::-;45086:50;;45162:1;45151:8;:12;;;:41;;;;;45190:2;45179:8;:13;;;;:::i;:::-;45167:25;;:9;:25;;;45151:41;45147:99;;;45232:2;45221:8;:13;;;;:::i;:::-;45209:25;;45147:99;45256:17;45276:9;45256:29;;45406:8;45417:1;45406:12;;45401:252;45424:8;45420:12;;:1;:12;;;45401:252;;;45454:13;45504:2;45495:5;45486;45482:1;:9;;;;:::i;:::-;45472:7;:19;;;;:::i;:::-;45471:29;;;;:::i;:::-;45470:36;;;;:::i;:::-;45454:52;;;;45571:8;45561:9;:18;;;;:::i;:::-;45521:7;45529:4;45521:13;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;45542:8;45521:30;;;;;;;:::i;:::-;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;45633:8;45623:9;:18;;;;:::i;:::-;45610:10;:31;;;;:::i;:::-;45597:44;;45439:214;45434:3;;;;;:::i;:::-;;;;45401:252;;;;45700:10;45733:2;45724:5;45714:7;:15;;;;:::i;:::-;45713:22;;;;:::i;:::-;45700:35;;;;45784:10;45746:7;45754:4;45746:13;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;45767:5;45746:27;;;;;;;:::i;:::-;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44876:927;;;;;44799:1004;;;:::o;48101:498::-;48299:24;48326:7;48334:4;48326:13;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;48299:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48362:229;48391:4;48410:10;48435:7;48457:5;48477:11;48503:10;48528:9;48552:7;48574:6;48362:229;;;;;;;;;;;;;;:::i;:::-;;;;;;;;48288:311;48101:498;;;;;;;;:::o;21880:191::-;21954:16;21973:6;;;;;;;;;;;21954:25;;21999:8;21990:6;;:17;;;;;;;;;;;;;;;;;;22054:8;22023:40;;22044:8;22023:40;;;;;;;;;;;;21943:128;21880:191;:::o;48824:521::-;48889:5;48896:7;48905;48952:2;48938:3;:10;:16;48930:25;;;;;;48968:9;48988;49008:7;49124:2;49119:3;49115:12;49109:19;49104:24;;49190:2;49185:3;49181:12;49175:19;49170:24;;49293:2;49288:3;49284:12;49278:19;49275:1;49270:28;49265:33;;49329:1;49332;49335;49321:16;;;;;;;;;48824:521;;;;;:::o;5621:326::-;5681:4;5938:1;5916:7;:19;;;:23;5909:30;;5621:326;;;:::o;20156:97::-;16995:13;;;;;;;;;;;16987:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20219:26:::1;:24;:26::i;:::-;20156:97::o:0;18651:98::-;18704:7;18731:10;18724:17;;18651:98;:::o;1756:195::-;1817:21;1929:4;1919:14;;1756:195;;;:::o;2054:::-;2115:21;2227:4;2217:14;;2054:195;;;:::o;24064:284::-;24146:48;24176:17;24146:29;:48::i;:::-;24138:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;24323:17;24255:59;23534:66;24293:20;;24255:37;:59::i;:::-;:65;;;:85;;;;;;;;;;;;;;;;;;24064:284;:::o;24757:297::-;24900:29;24911:17;24900:10;:29::i;:::-;24958:1;24944:4;:11;:15;:28;;;;24963:9;24944:28;24940:107;;;24989:46;25011:17;25030:4;24989:21;:46::i;:::-;;24940:107;24757:297;;;:::o;20261:113::-;16995:13;;;;;;;;;;;16987:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20334:32:::1;20353:12;:10;:12::i;:::-;20334:18;:32::i;:::-;20261:113::o:0;24461:155::-;24528:37;24547:17;24528:18;:37::i;:::-;24590:17;24581:27;;;;;;;;;;;;24461:155;:::o;29494:461::-;29577:12;29610:37;29640:6;29610:29;:37::i;:::-;29602:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;29764:12;29778:23;29805:6;:19;;29825:4;29805:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29763:67;;;;29848:99;29884:7;29893:10;29848:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;29841:106;;;;29494:461;;;;:::o;11195:762::-;11345:12;11374:7;11370:580;;;11405:10;11398:17;;;;11370:580;11539:1;11519:10;:17;:21;11515:424;;;11767:10;11761:17;11828:15;11815:10;11811:2;11807:19;11800:44;11515:424;11910:12;11903:20;;;;;;;;;;;:::i;:::-;;;;;;;;11195:762;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:::-;1032:5;1070:6;1057:20;1048:29;;1086:33;1113:5;1086:33;:::i;:::-;986:139;;;;:::o;1131:143::-;1188:5;1219:6;1213:13;1204:22;;1235:33;1262:5;1235:33;:::i;:::-;1131:143;;;;:::o;1293:338::-;1348:5;1397:3;1390:4;1382:6;1378:17;1374:27;1364:122;;1405:79;;:::i;:::-;1364:122;1522:6;1509:20;1547:78;1621:3;1613:6;1606:4;1598:6;1594:17;1547:78;:::i;:::-;1538:87;;1354:277;1293:338;;;;:::o;1651:340::-;1707:5;1756:3;1749:4;1741:6;1737:17;1733:27;1723:122;;1764:79;;:::i;:::-;1723:122;1881:6;1868:20;1906:79;1981:3;1973:6;1966:4;1958:6;1954:17;1906:79;:::i;:::-;1897:88;;1713:278;1651:340;;;;:::o;1997:137::-;2042:5;2080:6;2067:20;2058:29;;2096:32;2122:5;2096:32;:::i;:::-;1997:137;;;;:::o;2140:329::-;2199:6;2248:2;2236:9;2227:7;2223:23;2219:32;2216:119;;;2254:79;;:::i;:::-;2216:119;2374:1;2399:53;2444:7;2435:6;2424:9;2420:22;2399:53;:::i;:::-;2389:63;;2345:117;2140:329;;;;:::o;2475:652::-;2552:6;2560;2609:2;2597:9;2588:7;2584:23;2580:32;2577:119;;;2615:79;;:::i;:::-;2577:119;2735:1;2760:53;2805:7;2796:6;2785:9;2781:22;2760:53;:::i;:::-;2750:63;;2706:117;2890:2;2879:9;2875:18;2862:32;2921:18;2913:6;2910:30;2907:117;;;2943:79;;:::i;:::-;2907:117;3048:62;3102:7;3093:6;3082:9;3078:22;3048:62;:::i;:::-;3038:72;;2833:287;2475:652;;;;;:::o;3133:351::-;3203:6;3252:2;3240:9;3231:7;3227:23;3223:32;3220:119;;;3258:79;;:::i;:::-;3220:119;3378:1;3403:64;3459:7;3450:6;3439:9;3435:22;3403:64;:::i;:::-;3393:74;;3349:128;3133:351;;;;:::o;3490:652::-;3567:6;3575;3624:2;3612:9;3603:7;3599:23;3595:32;3592:119;;;3630:79;;:::i;:::-;3592:119;3750:1;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3721:117;3905:2;3894:9;3890:18;3877:32;3936:18;3928:6;3925:30;3922:117;;;3958:79;;:::i;:::-;3922:117;4063:62;4117:7;4108:6;4097:9;4093:22;4063:62;:::i;:::-;4053:72;;3848:287;3490:652;;;;;:::o;4148:509::-;4217:6;4266:2;4254:9;4245:7;4241:23;4237:32;4234:119;;;4272:79;;:::i;:::-;4234:119;4420:1;4409:9;4405:17;4392:31;4450:18;4442:6;4439:30;4436:117;;;4472:79;;:::i;:::-;4436:117;4577:63;4632:7;4623:6;4612:9;4608:22;4577:63;:::i;:::-;4567:73;;4363:287;4148:509;;;;:::o;4663:1411::-;4784:6;4792;4800;4808;4816;4824;4873:3;4861:9;4852:7;4848:23;4844:33;4841:120;;;4880:79;;:::i;:::-;4841:120;5028:1;5017:9;5013:17;5000:31;5058:18;5050:6;5047:30;5044:117;;;5080:79;;:::i;:::-;5044:117;5185:63;5240:7;5231:6;5220:9;5216:22;5185:63;:::i;:::-;5175:73;;4971:287;5297:2;5323:52;5367:7;5358:6;5347:9;5343:22;5323:52;:::i;:::-;5313:62;;5268:117;5452:2;5441:9;5437:18;5424:32;5483:18;5475:6;5472:30;5469:117;;;5505:79;;:::i;:::-;5469:117;5610:63;5665:7;5656:6;5645:9;5641:22;5610:63;:::i;:::-;5600:73;;5395:288;5722:2;5748:52;5792:7;5783:6;5772:9;5768:22;5748:52;:::i;:::-;5738:62;;5693:117;5849:3;5876:53;5921:7;5912:6;5901:9;5897:22;5876:53;:::i;:::-;5866:63;;5820:119;5978:3;6005:52;6049:7;6040:6;6029:9;6025:22;6005:52;:::i;:::-;5995:62;;5949:118;4663:1411;;;;;;;;:::o;6080:1735::-;6219:6;6227;6235;6243;6251;6259;6267;6316:3;6304:9;6295:7;6291:23;6287:33;6284:120;;;6323:79;;:::i;:::-;6284:120;6471:1;6460:9;6456:17;6443:31;6501:18;6493:6;6490:30;6487:117;;;6523:79;;:::i;:::-;6487:117;6628:63;6683:7;6674:6;6663:9;6659:22;6628:63;:::i;:::-;6618:73;;6414:287;6740:2;6766:52;6810:7;6801:6;6790:9;6786:22;6766:52;:::i;:::-;6756:62;;6711:117;6895:2;6884:9;6880:18;6867:32;6926:18;6918:6;6915:30;6912:117;;;6948:79;;:::i;:::-;6912:117;7053:63;7108:7;7099:6;7088:9;7084:22;7053:63;:::i;:::-;7043:73;;6838:288;7165:2;7191:52;7235:7;7226:6;7215:9;7211:22;7191:52;:::i;:::-;7181:62;;7136:117;7292:3;7319:53;7364:7;7355:6;7344:9;7340:22;7319:53;:::i;:::-;7309:63;;7263:119;7421:3;7448:52;7492:7;7483:6;7472:9;7468:22;7448:52;:::i;:::-;7438:62;;7392:118;7577:3;7566:9;7562:19;7549:33;7609:18;7601:6;7598:30;7595:117;;;7631:79;;:::i;:::-;7595:117;7736:62;7790:7;7781:6;7770:9;7766:22;7736:62;:::i;:::-;7726:72;;7520:288;6080:1735;;;;;;;;;;:::o;7821:244::-;7934:10;7969:90;8055:3;8047:6;7969:90;:::i;:::-;7955:104;;7821:244;;;;:::o;8071:175::-;8138:10;8159:44;8199:3;8191:6;8159:44;:::i;:::-;8235:4;8230:3;8226:14;8212:28;;8071:175;;;;:::o;8252:118::-;8339:24;8357:5;8339:24;:::i;:::-;8334:3;8327:37;8252:118;;:::o;8436:1087::-;8599:3;8628:76;8698:5;8628:76;:::i;:::-;8720:108;8821:6;8816:3;8720:108;:::i;:::-;8713:115;;8854:3;8899:4;8891:6;8887:17;8882:3;8878:27;8929:78;9001:5;8929:78;:::i;:::-;9030:7;9061:1;9046:432;9071:6;9068:1;9065:13;9046:432;;;9142:9;9136:4;9132:20;9127:3;9120:33;9193:6;9187:13;9221:108;9324:4;9309:13;9221:108;:::i;:::-;9213:116;;9352:82;9427:6;9352:82;:::i;:::-;9342:92;;9463:4;9458:3;9454:14;9447:21;;9106:372;9093:1;9090;9086:9;9081:14;;9046:432;;;9050:14;9494:4;9487:11;;9514:3;9507:10;;8604:919;;;;;8436:1087;;;;:::o;9561:672::-;9687:52;9733:5;9687:52;:::i;:::-;9755:74;9822:6;9817:3;9755:74;:::i;:::-;9748:81;;9853:54;9901:5;9853:54;:::i;:::-;9930:7;9961:1;9946:280;9971:6;9968:1;9965:13;9946:280;;;10047:6;10041:13;10074:61;10131:3;10116:13;10074:61;:::i;:::-;10067:68;;10158:58;10209:6;10158:58;:::i;:::-;10148:68;;10006:220;9993:1;9990;9986:9;9981:14;;9946:280;;;9950:14;9663:570;;;9561:672;;:::o;10271:692::-;10407:52;10453:5;10407:52;:::i;:::-;10475:84;10552:6;10547:3;10475:84;:::i;:::-;10468:91;;10583:54;10631:5;10583:54;:::i;:::-;10660:7;10691:1;10676:280;10701:6;10698:1;10695:13;10676:280;;;10777:6;10771:13;10804:61;10861:3;10846:13;10804:61;:::i;:::-;10797:68;;10888:58;10939:6;10888:58;:::i;:::-;10878:68;;10736:220;10723:1;10720;10716:9;10711:14;;10676:280;;;10680:14;10383:580;;;10271:692;;:::o;10969:118::-;11056:24;11074:5;11056:24;:::i;:::-;11051:3;11044:37;10969:118;;:::o;11093:340::-;11169:3;11197:38;11229:5;11197:38;:::i;:::-;11251:60;11304:6;11299:3;11251:60;:::i;:::-;11244:67;;11320:52;11365:6;11360:3;11353:4;11346:5;11342:16;11320:52;:::i;:::-;11397:29;11419:6;11397:29;:::i;:::-;11392:3;11388:39;11381:46;;11173:260;11093:340;;;;:::o;11439:360::-;11525:3;11553:38;11585:5;11553:38;:::i;:::-;11607:70;11670:6;11665:3;11607:70;:::i;:::-;11600:77;;11686:52;11731:6;11726:3;11719:4;11712:5;11708:16;11686:52;:::i;:::-;11763:29;11785:6;11763:29;:::i;:::-;11758:3;11754:39;11747:46;;11529:270;11439:360;;;;:::o;11805:373::-;11909:3;11937:38;11969:5;11937:38;:::i;:::-;11991:88;12072:6;12067:3;11991:88;:::i;:::-;11984:95;;12088:52;12133:6;12128:3;12121:4;12114:5;12110:16;12088:52;:::i;:::-;12165:6;12160:3;12156:16;12149:23;;11913:265;11805:373;;;;:::o;12184:143::-;12277:43;12314:5;12277:43;:::i;:::-;12272:3;12265:56;12184:143;;:::o;12333:344::-;12411:3;12439:39;12472:5;12439:39;:::i;:::-;12494:61;12548:6;12543:3;12494:61;:::i;:::-;12487:68;;12564:52;12609:6;12604:3;12597:4;12590:5;12586:16;12564:52;:::i;:::-;12641:29;12663:6;12641:29;:::i;:::-;12636:3;12632:39;12625:46;;12415:262;12333:344;;;;:::o;12683:364::-;12771:3;12799:39;12832:5;12799:39;:::i;:::-;12854:71;12918:6;12913:3;12854:71;:::i;:::-;12847:78;;12934:52;12979:6;12974:3;12967:4;12960:5;12956:16;12934:52;:::i;:::-;13011:29;13033:6;13011:29;:::i;:::-;13006:3;13002:39;12995:46;;12775:272;12683:364;;;;:::o;13053:377::-;13159:3;13187:39;13220:5;13187:39;:::i;:::-;13242:89;13324:6;13319:3;13242:89;:::i;:::-;13235:96;;13340:52;13385:6;13380:3;13373:4;13366:5;13362:16;13340:52;:::i;:::-;13417:6;13412:3;13408:16;13401:23;;13163:267;13053:377;;;;:::o;13460:802::-;13545:3;13582:5;13576:12;13611:36;13637:9;13611:36;:::i;:::-;13663:71;13727:6;13722:3;13663:71;:::i;:::-;13656:78;;13765:1;13754:9;13750:17;13781:1;13776:135;;;;13925:1;13920:336;;;;13743:513;;13776:135;13860:4;13856:9;13845;13841:25;13836:3;13829:38;13896:4;13891:3;13887:14;13880:21;;13776:135;;13920:336;13987:38;14019:5;13987:38;:::i;:::-;14047:1;14061:154;14075:6;14072:1;14069:13;14061:154;;;14149:7;14143:14;14139:1;14134:3;14130:11;14123:35;14199:1;14190:7;14186:15;14175:26;;14097:4;14094:1;14090:12;14085:17;;14061:154;;;14244:1;14239:3;14235:11;14228:18;;13927:329;;13743:513;;13549:713;;13460:802;;;;:::o;14268:366::-;14410:3;14431:67;14495:2;14490:3;14431:67;:::i;:::-;14424:74;;14507:93;14596:3;14507:93;:::i;:::-;14625:2;14620:3;14616:12;14609:19;;14268:366;;;:::o;14640:::-;14782:3;14803:67;14867:2;14862:3;14803:67;:::i;:::-;14796:74;;14879:93;14968:3;14879:93;:::i;:::-;14997:2;14992:3;14988:12;14981:19;;14640:366;;;:::o;15012:::-;15154:3;15175:67;15239:2;15234:3;15175:67;:::i;:::-;15168:74;;15251:93;15340:3;15251:93;:::i;:::-;15369:2;15364:3;15360:12;15353:19;;15012:366;;;:::o;15384:::-;15526:3;15547:67;15611:2;15606:3;15547:67;:::i;:::-;15540:74;;15623:93;15712:3;15623:93;:::i;:::-;15741:2;15736:3;15732:12;15725:19;;15384:366;;;:::o;15756:::-;15898:3;15919:67;15983:2;15978:3;15919:67;:::i;:::-;15912:74;;15995:93;16084:3;15995:93;:::i;:::-;16113:2;16108:3;16104:12;16097:19;;15756:366;;;:::o;16128:::-;16270:3;16291:67;16355:2;16350:3;16291:67;:::i;:::-;16284:74;;16367:93;16456:3;16367:93;:::i;:::-;16485:2;16480:3;16476:12;16469:19;;16128:366;;;:::o;16500:::-;16642:3;16663:67;16727:2;16722:3;16663:67;:::i;:::-;16656:74;;16739:93;16828:3;16739:93;:::i;:::-;16857:2;16852:3;16848:12;16841:19;;16500:366;;;:::o;16872:::-;17014:3;17035:67;17099:2;17094:3;17035:67;:::i;:::-;17028:74;;17111:93;17200:3;17111:93;:::i;:::-;17229:2;17224:3;17220:12;17213:19;;16872:366;;;:::o;17244:::-;17386:3;17407:67;17471:2;17466:3;17407:67;:::i;:::-;17400:74;;17483:93;17572:3;17483:93;:::i;:::-;17601:2;17596:3;17592:12;17585:19;;17244:366;;;:::o;17616:::-;17758:3;17779:67;17843:2;17838:3;17779:67;:::i;:::-;17772:74;;17855:93;17944:3;17855:93;:::i;:::-;17973:2;17968:3;17964:12;17957:19;;17616:366;;;:::o;17988:::-;18130:3;18151:67;18215:2;18210:3;18151:67;:::i;:::-;18144:74;;18227:93;18316:3;18227:93;:::i;:::-;18345:2;18340:3;18336:12;18329:19;;17988:366;;;:::o;18360:::-;18502:3;18523:67;18587:2;18582:3;18523:67;:::i;:::-;18516:74;;18599:93;18688:3;18599:93;:::i;:::-;18717:2;18712:3;18708:12;18701:19;;18360:366;;;:::o;18732:::-;18874:3;18895:67;18959:2;18954:3;18895:67;:::i;:::-;18888:74;;18971:93;19060:3;18971:93;:::i;:::-;19089:2;19084:3;19080:12;19073:19;;18732:366;;;:::o;19104:::-;19246:3;19267:67;19331:2;19326:3;19267:67;:::i;:::-;19260:74;;19343:93;19432:3;19343:93;:::i;:::-;19461:2;19456:3;19452:12;19445:19;;19104:366;;;:::o;19476:::-;19618:3;19639:67;19703:2;19698:3;19639:67;:::i;:::-;19632:74;;19715:93;19804:3;19715:93;:::i;:::-;19833:2;19828:3;19824:12;19817:19;;19476:366;;;:::o;19848:::-;19990:3;20011:67;20075:2;20070:3;20011:67;:::i;:::-;20004:74;;20087:93;20176:3;20087:93;:::i;:::-;20205:2;20200:3;20196:12;20189:19;;19848:366;;;:::o;20220:::-;20362:3;20383:67;20447:2;20442:3;20383:67;:::i;:::-;20376:74;;20459:93;20548:3;20459:93;:::i;:::-;20577:2;20572:3;20568:12;20561:19;;20220:366;;;:::o;20592:::-;20734:3;20755:67;20819:2;20814:3;20755:67;:::i;:::-;20748:74;;20831:93;20920:3;20831:93;:::i;:::-;20949:2;20944:3;20940:12;20933:19;;20592:366;;;:::o;20964:::-;21106:3;21127:67;21191:2;21186:3;21127:67;:::i;:::-;21120:74;;21203:93;21292:3;21203:93;:::i;:::-;21321:2;21316:3;21312:12;21305:19;;20964:366;;;:::o;21336:::-;21478:3;21499:67;21563:2;21558:3;21499:67;:::i;:::-;21492:74;;21575:93;21664:3;21575:93;:::i;:::-;21693:2;21688:3;21684:12;21677:19;;21336:366;;;:::o;21708:::-;21850:3;21871:67;21935:2;21930:3;21871:67;:::i;:::-;21864:74;;21947:93;22036:3;21947:93;:::i;:::-;22065:2;22060:3;22056:12;22049:19;;21708:366;;;:::o;22136:1429::-;22239:3;22275:6;22270:3;22266:16;22370:4;22363:5;22359:16;22353:23;22389:61;22444:4;22439:3;22435:14;22421:12;22389:61;:::i;:::-;22292:168;22545:4;22538:5;22534:16;22528:23;22598:3;22592:4;22588:14;22581:4;22576:3;22572:14;22565:38;22624:73;22692:4;22678:12;22624:73;:::i;:::-;22616:81;;22470:238;22795:4;22788:5;22784:16;22778:23;22814:61;22869:4;22864:3;22860:14;22846:12;22814:61;:::i;:::-;22718:167;22977:4;22970:5;22966:16;22960:23;22996:61;23051:4;23046:3;23042:14;23028:12;22996:61;:::i;:::-;22895:172;23155:4;23148:5;23144:16;23138:23;23208:3;23202:4;23198:14;23191:4;23186:3;23182:14;23175:38;23234:71;23300:4;23286:12;23234:71;:::i;:::-;23226:79;;23077:239;23400:4;23393:5;23389:16;23383:23;23419:109;23522:4;23517:3;23513:14;23499:12;23419:109;:::i;:::-;23326:212;23555:4;23548:11;;22244:1321;22136:1429;;;;:::o;23571:105::-;23646:23;23663:5;23646:23;:::i;:::-;23641:3;23634:36;23571:105;;:::o;23682:118::-;23769:24;23787:5;23769:24;:::i;:::-;23764:3;23757:37;23682:118;;:::o;23806:105::-;23881:23;23898:5;23881:23;:::i;:::-;23876:3;23869:36;23806:105;;:::o;23917:115::-;24002:23;24019:5;24002:23;:::i;:::-;23997:3;23990:36;23917:115;;:::o;24038:::-;24123:23;24140:5;24123:23;:::i;:::-;24118:3;24111:36;24038:115;;:::o;24159:112::-;24242:22;24258:5;24242:22;:::i;:::-;24237:3;24230:35;24159:112;;:::o;24277:271::-;24407:3;24429:93;24518:3;24509:6;24429:93;:::i;:::-;24422:100;;24539:3;24532:10;;24277:271;;;;:::o;24554:275::-;24686:3;24708:95;24799:3;24790:6;24708:95;:::i;:::-;24701:102;;24820:3;24813:10;;24554:275;;;;:::o;24835:222::-;24928:4;24966:2;24955:9;24951:18;24943:26;;24979:71;25047:1;25036:9;25032:17;25023:6;24979:71;:::i;:::-;24835:222;;;;:::o;25063:332::-;25184:4;25222:2;25211:9;25207:18;25199:26;;25235:71;25303:1;25292:9;25288:17;25279:6;25235:71;:::i;:::-;25316:72;25384:2;25373:9;25369:18;25360:6;25316:72;:::i;:::-;25063:332;;;;;:::o;25401:461::-;25588:4;25626:2;25615:9;25611:18;25603:26;;25675:9;25669:4;25665:20;25661:1;25650:9;25646:17;25639:47;25703:152;25850:4;25841:6;25703:152;:::i;:::-;25695:160;;25401:461;;;;:::o;25868:222::-;25961:4;25999:2;25988:9;25984:18;25976:26;;26012:71;26080:1;26069:9;26065:17;26056:6;26012:71;:::i;:::-;25868:222;;;;:::o;26096:545::-;26269:4;26307:3;26296:9;26292:19;26284:27;;26321:71;26389:1;26378:9;26374:17;26365:6;26321:71;:::i;:::-;26402:68;26466:2;26455:9;26451:18;26442:6;26402:68;:::i;:::-;26480:72;26548:2;26537:9;26533:18;26524:6;26480:72;:::i;:::-;26562;26630:2;26619:9;26615:18;26606:6;26562:72;:::i;:::-;26096:545;;;;;;;:::o;26647:234::-;26746:4;26784:2;26773:9;26769:18;26761:26;;26797:77;26871:1;26860:9;26856:17;26847:6;26797:77;:::i;:::-;26647:234;;;;:::o;26887:313::-;27000:4;27038:2;27027:9;27023:18;27015:26;;27087:9;27081:4;27077:20;27073:1;27062:9;27058:17;27051:47;27115:78;27188:4;27179:6;27115:78;:::i;:::-;27107:86;;26887:313;;;;:::o;27206:945::-;27473:4;27511:3;27500:9;27496:19;27488:27;;27561:9;27555:4;27551:20;27547:1;27536:9;27532:17;27525:47;27589:78;27662:4;27653:6;27589:78;:::i;:::-;27581:86;;27677:70;27743:2;27732:9;27728:18;27719:6;27677:70;:::i;:::-;27794:9;27788:4;27784:20;27779:2;27768:9;27764:18;27757:48;27822:78;27895:4;27886:6;27822:78;:::i;:::-;27814:86;;27910:70;27976:2;27965:9;27961:18;27952:6;27910:70;:::i;:::-;27990:73;28058:3;28047:9;28043:19;28034:6;27990:73;:::i;:::-;28073:71;28139:3;28128:9;28124:19;28115:6;28073:71;:::i;:::-;27206:945;;;;;;;;;:::o;28157:1363::-;28550:4;28588;28577:9;28573:20;28565:28;;28639:9;28633:4;28629:20;28625:1;28614:9;28610:17;28603:47;28667:78;28740:4;28731:6;28667:78;:::i;:::-;28659:86;;28755:70;28821:2;28810:9;28806:18;28797:6;28755:70;:::i;:::-;28872:9;28866:4;28862:20;28857:2;28846:9;28842:18;28835:48;28900:78;28973:4;28964:6;28900:78;:::i;:::-;28892:86;;28988:70;29054:2;29043:9;29039:18;29030:6;28988:70;:::i;:::-;29068:73;29136:3;29125:9;29121:19;29112:6;29068:73;:::i;:::-;29151:71;29217:3;29206:9;29202:19;29193:6;29151:71;:::i;:::-;29232;29298:3;29287:9;29283:19;29274:6;29232:71;:::i;:::-;29313;29379:3;29368:9;29364:19;29355:6;29313:71;:::i;:::-;29394:119;29508:3;29497:9;29493:19;29484:6;29394:119;:::i;:::-;28157:1363;;;;;;;;;;;;:::o;29526:1236::-;29885:4;29923;29912:9;29908:20;29900:28;;29974:9;29968:4;29964:20;29960:1;29949:9;29945:17;29938:47;30002:78;30075:4;30066:6;30002:78;:::i;:::-;29994:86;;30090:70;30156:2;30145:9;30141:18;30132:6;30090:70;:::i;:::-;30207:9;30201:4;30197:20;30192:2;30181:9;30177:18;30170:48;30235:78;30308:4;30299:6;30235:78;:::i;:::-;30227:86;;30323:70;30389:2;30378:9;30374:18;30365:6;30323:70;:::i;:::-;30403:71;30469:3;30458:9;30454:19;30445:6;30403:71;:::i;:::-;30522:9;30516:4;30512:20;30506:3;30495:9;30491:19;30484:49;30550:76;30621:4;30612:6;30550:76;:::i;:::-;30542:84;;30636:119;30750:3;30739:9;30735:19;30726:6;30636:119;:::i;:::-;29526:1236;;;;;;;;;;:::o;30768:508::-;30926:4;30964:2;30953:9;30949:18;30941:26;;31013:9;31007:4;31003:20;30999:1;30988:9;30984:17;30977:47;31041:75;31111:4;31102:6;31041:75;:::i;:::-;31033:83;;31163:9;31157:4;31153:20;31148:2;31137:9;31133:18;31126:48;31191:78;31264:4;31255:6;31191:78;:::i;:::-;31183:86;;30768:508;;;;;:::o;31282:419::-;31448:4;31486:2;31475:9;31471:18;31463:26;;31535:9;31529:4;31525:20;31521:1;31510:9;31506:17;31499:47;31563:131;31689:4;31563:131;:::i;:::-;31555:139;;31282:419;;;:::o;31707:::-;31873:4;31911:2;31900:9;31896:18;31888:26;;31960:9;31954:4;31950:20;31946:1;31935:9;31931:17;31924:47;31988:131;32114:4;31988:131;:::i;:::-;31980:139;;31707:419;;;:::o;32132:::-;32298:4;32336:2;32325:9;32321:18;32313:26;;32385:9;32379:4;32375:20;32371:1;32360:9;32356:17;32349:47;32413:131;32539:4;32413:131;:::i;:::-;32405:139;;32132:419;;;:::o;32557:::-;32723:4;32761:2;32750:9;32746:18;32738:26;;32810:9;32804:4;32800:20;32796:1;32785:9;32781:17;32774:47;32838:131;32964:4;32838:131;:::i;:::-;32830:139;;32557:419;;;:::o;32982:::-;33148:4;33186:2;33175:9;33171:18;33163:26;;33235:9;33229:4;33225:20;33221:1;33210:9;33206:17;33199:47;33263:131;33389:4;33263:131;:::i;:::-;33255:139;;32982:419;;;:::o;33407:::-;33573:4;33611:2;33600:9;33596:18;33588:26;;33660:9;33654:4;33650:20;33646:1;33635:9;33631:17;33624:47;33688:131;33814:4;33688:131;:::i;:::-;33680:139;;33407:419;;;:::o;33832:::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:::-;34423:4;34461:2;34450:9;34446:18;34438:26;;34510:9;34504:4;34500:20;34496:1;34485:9;34481:17;34474:47;34538:131;34664:4;34538:131;:::i;:::-;34530:139;;34257:419;;;:::o;34682:::-;34848:4;34886:2;34875:9;34871:18;34863:26;;34935:9;34929:4;34925:20;34921:1;34910:9;34906:17;34899:47;34963:131;35089:4;34963:131;:::i;:::-;34955:139;;34682:419;;;:::o;35107:::-;35273:4;35311:2;35300:9;35296:18;35288:26;;35360:9;35354:4;35350:20;35346:1;35335:9;35331:17;35324:47;35388:131;35514:4;35388:131;:::i;:::-;35380:139;;35107:419;;;:::o;35532:::-;35698:4;35736:2;35725:9;35721:18;35713:26;;35785:9;35779:4;35775:20;35771:1;35760:9;35756:17;35749:47;35813:131;35939:4;35813:131;:::i;:::-;35805:139;;35532:419;;;:::o;35957:::-;36123:4;36161:2;36150:9;36146:18;36138:26;;36210:9;36204:4;36200:20;36196:1;36185:9;36181:17;36174:47;36238:131;36364:4;36238:131;:::i;:::-;36230:139;;35957:419;;;:::o;36382:::-;36548:4;36586:2;36575:9;36571:18;36563:26;;36635:9;36629:4;36625:20;36621:1;36610:9;36606:17;36599:47;36663:131;36789:4;36663:131;:::i;:::-;36655:139;;36382:419;;;:::o;36807:::-;36973:4;37011:2;37000:9;36996:18;36988:26;;37060:9;37054:4;37050:20;37046:1;37035:9;37031:17;37024:47;37088:131;37214:4;37088:131;:::i;:::-;37080:139;;36807:419;;;:::o;37232:::-;37398:4;37436:2;37425:9;37421:18;37413:26;;37485:9;37479:4;37475:20;37471:1;37460:9;37456:17;37449:47;37513:131;37639:4;37513:131;:::i;:::-;37505:139;;37232:419;;;:::o;37657:726::-;37897:4;37935:2;37924:9;37920:18;37912:26;;37984:9;37978:4;37974:20;37970:1;37959:9;37955:17;37948:47;38012:131;38138:4;38012:131;:::i;:::-;38004:139;;38153:72;38221:2;38210:9;38206:18;38197:6;38153:72;:::i;:::-;38272:9;38266:4;38262:20;38257:2;38246:9;38242:18;38235:48;38300:76;38371:4;38362:6;38300:76;:::i;:::-;38292:84;;37657:726;;;;;:::o;38389:419::-;38555:4;38593:2;38582:9;38578:18;38570:26;;38642:9;38636:4;38632:20;38628:1;38617:9;38613:17;38606:47;38670:131;38796:4;38670:131;:::i;:::-;38662:139;;38389:419;;;:::o;38814:::-;38980:4;39018:2;39007:9;39003:18;38995:26;;39067:9;39061:4;39057:20;39053:1;39042:9;39038:17;39031:47;39095:131;39221:4;39095:131;:::i;:::-;39087:139;;38814:419;;;:::o;39239:::-;39405:4;39443:2;39432:9;39428:18;39420:26;;39492:9;39486:4;39482:20;39478:1;39467:9;39463:17;39456:47;39520:131;39646:4;39520:131;:::i;:::-;39512:139;;39239:419;;;:::o;39664:::-;39830:4;39868:2;39857:9;39853:18;39845:26;;39917:9;39911:4;39907:20;39903:1;39892:9;39888:17;39881:47;39945:131;40071:4;39945:131;:::i;:::-;39937:139;;39664:419;;;:::o;40089:::-;40255:4;40293:2;40282:9;40278:18;40270:26;;40342:9;40336:4;40332:20;40328:1;40317:9;40313:17;40306:47;40370:131;40496:4;40370:131;:::i;:::-;40362:139;;40089:419;;;:::o;40514:324::-;40631:4;40669:2;40658:9;40654:18;40646:26;;40682:69;40748:1;40737:9;40733:17;40724:6;40682:69;:::i;:::-;40761:70;40827:2;40816:9;40812:18;40803:6;40761:70;:::i;:::-;40514:324;;;;;:::o;40844:129::-;40878:6;40905:20;;:::i;:::-;40895:30;;40934:33;40962:4;40954:6;40934:33;:::i;:::-;40844:129;;;:::o;40979:75::-;41012:6;41045:2;41039:9;41029:19;;40979:75;:::o;41060:307::-;41121:4;41211:18;41203:6;41200:30;41197:56;;;41233:18;;:::i;:::-;41197:56;41271:29;41293:6;41271:29;:::i;:::-;41263:37;;41355:4;41349;41345:15;41337:23;;41060:307;;;:::o;41373:308::-;41435:4;41525:18;41517:6;41514:30;41511:56;;;41547:18;;:::i;:::-;41511:56;41585:29;41607:6;41585:29;:::i;:::-;41577:37;;41669:4;41663;41659:15;41651:23;;41373:308;;;:::o;41687:154::-;41776:4;41799:3;41791:11;;41829:4;41824:3;41820:14;41812:22;;41687:154;;;:::o;41847:98::-;41912:4;41935:3;41927:11;;41847:98;;;:::o;41951:141::-;42000:4;42023:3;42015:11;;42046:3;42043:1;42036:14;42080:4;42077:1;42067:18;42059:26;;41951:141;;;:::o;42098:136::-;42187:6;42221:5;42215:12;42205:22;;42098:136;;;:::o;42240:104::-;42305:6;42333:4;42323:14;;42240:104;;;:::o;42350:98::-;42401:6;42435:5;42429:12;42419:22;;42350:98;;;:::o;42454:99::-;42506:6;42540:5;42534:12;42524:22;;42454:99;;;:::o;42559:135::-;42651:4;42683;42678:3;42674:14;42666:22;;42559:135;;;:::o;42700:111::-;42768:4;42800;42795:3;42791:14;42783:22;;42700:111;;;:::o;42817:206::-;42938:11;42972:6;42967:3;42960:19;43012:4;43007:3;43003:14;42988:29;;42817:206;;;;:::o;43029:133::-;43116:11;43153:3;43138:18;;43029:133;;;;:::o;43168:143::-;43265:11;43302:3;43287:18;;43168:143;;;;:::o;43317:158::-;43390:11;43424:6;43419:3;43412:19;43464:4;43459:3;43455:14;43440:29;;43317:158;;;;:::o;43481:168::-;43564:11;43598:6;43593:3;43586:19;43638:4;43633:3;43629:14;43614:29;;43481:168;;;;:::o;43655:147::-;43756:11;43793:3;43778:18;;43655:147;;;;:::o;43808:159::-;43882:11;43916:6;43911:3;43904:19;43956:4;43951:3;43947:14;43932:29;;43808:159;;;;:::o;43973:169::-;44057:11;44091:6;44086:3;44079:19;44131:4;44126:3;44122:14;44107:29;;43973:169;;;;:::o;44148:148::-;44250:11;44287:3;44272:18;;44148:148;;;;:::o;44302:242::-;44341:3;44360:19;44377:1;44360:19;:::i;:::-;44355:24;;44393:19;44410:1;44393:19;:::i;:::-;44388:24;;44486:1;44478:6;44474:14;44471:1;44468:21;44465:47;;;44492:18;;:::i;:::-;44465:47;44536:1;44533;44529:9;44522:16;;44302:242;;;;:::o;44550:254::-;44589:3;44608:19;44625:1;44608:19;:::i;:::-;44603:24;;44641:19;44658:1;44641:19;:::i;:::-;44636:24;;44746:1;44726:18;44722:26;44719:1;44716:33;44713:59;;;44752:18;;:::i;:::-;44713:59;44796:1;44793;44789:9;44782:16;;44550:254;;;;:::o;44810:237::-;44848:3;44867:18;44883:1;44867:18;:::i;:::-;44862:23;;44899:18;44915:1;44899:18;:::i;:::-;44894:23;;44989:1;44983:4;44979:12;44976:1;44973:19;44970:45;;;44995:18;;:::i;:::-;44970:45;45039:1;45036;45032:9;45025:16;;44810:237;;;;:::o;45053:182::-;45092:1;45109:19;45126:1;45109:19;:::i;:::-;45104:24;;45142:19;45159:1;45142:19;:::i;:::-;45137:24;;45180:1;45170:35;;45185:18;;:::i;:::-;45170:35;45227:1;45224;45220:9;45215:14;;45053:182;;;;:::o;45241:289::-;45280:7;45303:19;45320:1;45303:19;:::i;:::-;45298:24;;45336:19;45353:1;45336:19;:::i;:::-;45331:24;;45467:1;45455:10;45451:18;45448:1;45445:25;45440:1;45433:9;45426:17;45422:49;45419:75;;;45474:18;;:::i;:::-;45419:75;45522:1;45519;45515:9;45504:20;;45241:289;;;;:::o;45536:188::-;45575:4;45595:19;45612:1;45595:19;:::i;:::-;45590:24;;45628:19;45645:1;45628:19;:::i;:::-;45623:24;;45666:1;45663;45660:8;45657:34;;;45671:18;;:::i;:::-;45657:34;45716:1;45713;45709:9;45701:17;;45536:188;;;;:::o;45730:96::-;45767:7;45796:24;45814:5;45796:24;:::i;:::-;45785:35;;45730:96;;;:::o;45832:77::-;45869:7;45898:5;45887:16;;45832:77;;;:::o;45915:89::-;45951:7;45991:6;45984:5;45980:18;45969:29;;45915:89;;;:::o;46010:126::-;46047:7;46087:42;46080:5;46076:54;46065:65;;46010:126;;;:::o;46142:77::-;46179:7;46208:5;46197:16;;46142:77;;;:::o;46225:93::-;46261:7;46301:10;46294:5;46290:22;46279:33;;46225:93;;;:::o;46324:101::-;46360:7;46400:18;46393:5;46389:30;46378:41;;46324:101;;;:::o;46431:86::-;46466:7;46506:4;46499:5;46495:16;46484:27;;46431:86;;;:::o;46523:117::-;46579:9;46612:22;46628:5;46612:22;:::i;:::-;46599:35;;46523:117;;;:::o;46646:154::-;46730:6;46725:3;46720;46707:30;46792:1;46783:6;46778:3;46774:16;46767:27;46646:154;;;:::o;46806:307::-;46874:1;46884:113;46898:6;46895:1;46892:13;46884:113;;;46983:1;46978:3;46974:11;46968:18;46964:1;46959:3;46955:11;46948:39;46920:2;46917:1;46913:10;46908:15;;46884:113;;;47015:6;47012:1;47009:13;47006:101;;;47095:1;47086:6;47081:3;47077:16;47070:27;47006:101;46855:258;46806:307;;;:::o;47119:320::-;47163:6;47200:1;47194:4;47190:12;47180:22;;47247:1;47241:4;47237:12;47268:18;47258:81;;47324:4;47316:6;47312:17;47302:27;;47258:81;47386:2;47378:6;47375:14;47355:18;47352:38;47349:84;;;47405:18;;:::i;:::-;47349:84;47170:269;47119:320;;;:::o;47445:281::-;47528:27;47550:4;47528:27;:::i;:::-;47520:6;47516:40;47658:6;47646:10;47643:22;47622:18;47610:10;47607:34;47604:62;47601:88;;;47669:18;;:::i;:::-;47601:88;47709:10;47705:2;47698:22;47488:238;47445:281;;:::o;47732:175::-;47770:3;47793:23;47810:5;47793:23;:::i;:::-;47784:32;;47838:10;47831:5;47828:21;47825:47;;;47852:18;;:::i;:::-;47825:47;47899:1;47892:5;47888:13;47881:20;;47732:175;;;:::o;47913:173::-;47944:1;47961:19;47978:1;47961:19;:::i;:::-;47956:24;;47994:19;48011:1;47994:19;:::i;:::-;47989:24;;48032:1;48022:35;;48037:18;;:::i;:::-;48022:35;48078:1;48075;48071:9;48066:14;;47913:173;;;;:::o;48092:180::-;48140:77;48137:1;48130:88;48237:4;48234:1;48227:15;48261:4;48258:1;48251:15;48278:180;48326:77;48323:1;48316:88;48423:4;48420:1;48413:15;48447:4;48444:1;48437:15;48464:180;48512:77;48509:1;48502:88;48609:4;48606:1;48599:15;48633:4;48630:1;48623:15;48650:180;48698:77;48695:1;48688:88;48795:4;48792:1;48785:15;48819:4;48816:1;48809:15;48836:180;48884:77;48881:1;48874:88;48981:4;48978:1;48971:15;49005:4;49002:1;48995:15;49022:117;49131:1;49128;49121:12;49145:117;49254:1;49251;49244:12;49268:117;49377:1;49374;49367:12;49391:117;49500:1;49497;49490:12;49514:102;49555:6;49606:2;49602:7;49597:2;49590:5;49586:14;49582:28;49572:38;;49514:102;;;:::o;49622:225::-;49762:34;49758:1;49750:6;49746:14;49739:58;49831:8;49826:2;49818:6;49814:15;49807:33;49622:225;:::o;49853:224::-;49993:34;49989:1;49981:6;49977:14;49970:58;50062:7;50057:2;50049:6;50045:15;50038:32;49853:224;:::o;50083:231::-;50223:34;50219:1;50211:6;50207:14;50200:58;50292:14;50287:2;50279:6;50275:15;50268:39;50083:231;:::o;50320:220::-;50460:34;50456:1;50448:6;50444:14;50437:58;50529:3;50524:2;50516:6;50512:15;50505:28;50320:220;:::o;50546:177::-;50686:29;50682:1;50674:6;50670:14;50663:53;50546:177;:::o;50729:231::-;50869:34;50865:1;50857:6;50853:14;50846:58;50938:14;50933:2;50925:6;50921:15;50914:39;50729:231;:::o;50966:243::-;51106:34;51102:1;51094:6;51090:14;51083:58;51175:26;51170:2;51162:6;51158:15;51151:51;50966:243;:::o;51215:228::-;51355:34;51351:1;51343:6;51339:14;51332:58;51424:11;51419:2;51411:6;51407:15;51400:36;51215:228;:::o;51449:233::-;51589:34;51585:1;51577:6;51573:14;51566:58;51658:16;51653:2;51645:6;51641:15;51634:41;51449:233;:::o;51688:224::-;51828:34;51824:1;51816:6;51812:14;51805:58;51897:7;51892:2;51884:6;51880:15;51873:32;51688:224;:::o;51918:178::-;52058:30;52054:1;52046:6;52042:14;52035:54;51918:178;:::o;52102:233::-;52242:34;52238:1;52230:6;52226:14;52219:58;52311:16;52306:2;52298:6;52294:15;52287:41;52102:233;:::o;52341:292::-;52481:34;52477:1;52469:6;52465:14;52458:58;52550:34;52545:2;52537:6;52533:15;52526:59;52619:6;52614:2;52606:6;52602:15;52595:31;52341:292;:::o;52639:232::-;52779:34;52775:1;52767:6;52763:14;52756:58;52848:15;52843:2;52835:6;52831:15;52824:40;52639:232;:::o;52877:182::-;53017:34;53013:1;53005:6;53001:14;52994:58;52877:182;:::o;53065:214::-;53205:66;53201:1;53193:6;53189:14;53182:90;53065:214;:::o;53285:182::-;53425:34;53421:1;53413:6;53409:14;53402:58;53285:182;:::o;53473:225::-;53613:34;53609:1;53601:6;53597:14;53590:58;53682:8;53677:2;53669:6;53665:15;53658:33;53473:225;:::o;53704:182::-;53844:34;53840:1;53832:6;53828:14;53821:58;53704:182;:::o;53892:::-;54032:34;54028:1;54020:6;54016:14;54009:58;53892:182;:::o;54080:230::-;54220:34;54216:1;54208:6;54204:14;54197:58;54289:13;54284:2;54276:6;54272:15;54265:38;54080:230;:::o;54316:122::-;54389:24;54407:5;54389:24;:::i;:::-;54382:5;54379:35;54369:63;;54428:1;54425;54418:12;54369:63;54316:122;:::o;54444:::-;54517:24;54535:5;54517:24;:::i;:::-;54510:5;54507:35;54497:63;;54556:1;54553;54546:12;54497:63;54444:122;:::o;54572:120::-;54644:23;54661:5;54644:23;:::i;:::-;54637:5;54634:34;54624:62;;54682:1;54679;54672:12;54624:62;54572:120;:::o
Swarm Source
ipfs://fa08e372fe5eb095429883f1e0819d115e1e483edd7366ed8fbeead3887063a9
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.