Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x3320F0A2...5D9F7E147 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
BCdpManager
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-11 */ /* B.PROTOCOL TERMS OF USE ======================= THE TERMS OF USE CONTAINED HEREIN (THESE “TERMS”) GOVERN YOUR USE OF B.PROTOCOL, WHICH IS A DECENTRALIZED PROTOCOL ON THE ETHEREUM BLOCKCHAIN (the “PROTOCOL”) THAT enables a backstop liquidity mechanism FOR DECENTRALIZED LENDING PLATFORMS (“DLPs”). PLEASE READ THESE TERMS CAREFULLY AT https://github.com/backstop-protocol/Terms-and-Conditions, INCLUDING ALL DISCLAIMERS AND RISK FACTORS, BEFORE USING THE PROTOCOL. BY USING THE PROTOCOL, YOU ARE IRREVOCABLY CONSENTING TO BE BOUND BY THESE TERMS. IF YOU DO NOT AGREE TO ALL OF THESE TERMS, DO NOT USE THE PROTOCOL. YOUR RIGHT TO USE THE PROTOCOL IS SUBJECT AND DEPENDENT BY YOUR AGREEMENT TO ALL TERMS AND CONDITIONS SET FORTH HEREIN, WHICH AGREEMENT SHALL BE EVIDENCED BY YOUR USE OF THE PROTOCOL. Minors Prohibited: The Protocol is not directed to individuals under the age of eighteen (18) or the age of majority in your jurisdiction if the age of majority is greater. If you are under the age of eighteen or the age of majority (if greater), you are not authorized to access or use the Protocol. By using the Protocol, you represent and warrant that you are above such age. License; No Warranties; Limitation of Liability; (a) The software underlying the Protocol is licensed for use in accordance with the 3-clause BSD License, which can be accessed here: https://opensource.org/licenses/BSD-3-Clause. (b) THE PROTOCOL IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", “WITH ALL FAULTS” and “AS AVAILABLE” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. (c) IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ pragma solidity ^0.5.12; contract Math { // --- Math --- function add(uint x, int y) internal pure returns (uint z) { z = x + uint(y); require(y >= 0 || z <= x); require(y <= 0 || z >= x); } function sub(uint x, int y) internal pure returns (uint z) { z = x - uint(y); require(y <= 0 || z <= x); require(y >= 0 || z >= x); } function mul(uint x, int y) internal pure returns (int z) { z = int(x) * y; require(int(x) >= 0); require(y == 0 || z / y == int(x)); } function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } uint constant RAY = 10 ** 27; function rdiv(uint x, uint y) internal pure returns (uint z) { z = mul(x, RAY) / y; } function rmul(uint x, uint y) internal pure returns (uint z) { z = mul(x, y) / RAY; } function rpow(uint x, uint n, uint b) internal pure returns (uint z) { assembly { switch x case 0 {switch n case 0 {z := b} default {z := 0}} default { switch mod(n, 2) case 0 { z := b } default { z := x } let half := div(b, 2) // for rounding. for { n := div(n, 2) } n { n := div(n,2) } { let xx := mul(x, x) if iszero(eq(div(xx, x), x)) { revert(0,0) } let xxRound := add(xx, half) if lt(xxRound, xx) { revert(0,0) } x := div(xxRound, b) if mod(n,2) { let zx := mul(z, x) if and(iszero(iszero(x)), iszero(eq(div(zx, x), z))) { revert(0,0) } let zxRound := add(zx, half) if lt(zxRound, zx) { revert(0,0) } z := div(zxRound, b) } } } } } function toInt(uint x) internal pure returns (int y) { y = int(x); require(y >= 0); } } contract LibNote { event LogNote( bytes4 indexed sig, address indexed usr, bytes32 indexed arg1, bytes32 indexed arg2, bytes data ) anonymous; modifier note { _; assembly { // log an 'anonymous' event with a constant 6 words of calldata // and four indexed topics: selector, caller, arg1 and arg2 let mark := msize() // end of memory ensures zero mstore(0x40, add(mark, 288)) // update free memory pointer mstore(mark, 0x20) // bytes type data offset mstore(add(mark, 0x20), 224) // bytes size (padded) calldatacopy(add(mark, 0x40), 0, 224) // bytes payload log4(mark, 288, // calldata shl(224, shr(224, calldataload(0))), // msg.sig caller(), // msg.sender calldataload(4), // arg1 calldataload(36) // arg2 ) } } } contract BCdpScoreLike { function updateScore(uint cdp, bytes32 ilk, int dink, int dart, uint time) external; } contract BCdpScoreConnector { BCdpScoreLike public score; mapping(uint => uint) public left; constructor(BCdpScoreLike score_) public { score = score_; } function setScore(BCdpScoreLike bcdpScore) internal { score = bcdpScore; } function updateScore(uint cdp, bytes32 ilk, int dink, int dart, uint time) internal { if(left[cdp] == 0) score.updateScore(cdp, ilk, dink, dart, time); } function quitScore(uint cdp) internal { if(left[cdp] == 0) left[cdp] = now; } } contract UrnHandler { constructor(address vat) public { VatLike(vat).hope(msg.sender); } } contract DssCdpManager is LibNote { address public vat; uint public cdpi; // Auto incremental mapping (uint => address) public urns; // CDPId => UrnHandler mapping (uint => List) public list; // CDPId => Prev & Next CDPIds (double linked list) mapping (uint => address) public owns; // CDPId => Owner mapping (uint => bytes32) public ilks; // CDPId => Ilk mapping (address => uint) public first; // Owner => First CDPId mapping (address => uint) public last; // Owner => Last CDPId mapping (address => uint) public count; // Owner => Amount of CDPs mapping ( address => mapping ( uint => mapping ( address => uint ) ) ) public cdpCan; // Owner => CDPId => Allowed Addr => True/False mapping ( address => mapping ( address => uint ) ) public urnCan; // Urn => Allowed Addr => True/False struct List { uint prev; uint next; } event NewCdp(address indexed usr, address indexed own, uint indexed cdp); modifier cdpAllowed( uint cdp ) { require(msg.sender == owns[cdp] || cdpCan[owns[cdp]][cdp][msg.sender] == 1, "cdp-not-allowed"); _; } modifier urnAllowed( address urn ) { require(msg.sender == urn || urnCan[urn][msg.sender] == 1, "urn-not-allowed"); _; } constructor(address vat_) public { vat = vat_; } function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function toInt(uint x) internal pure returns (int y) { y = int(x); require(y >= 0); } // Allow/disallow a usr address to manage the cdp. function cdpAllow( uint cdp, address usr, uint ok ) public cdpAllowed(cdp) { cdpCan[owns[cdp]][cdp][usr] = ok; } // Allow/disallow a usr address to quit to the the sender urn. function urnAllow( address usr, uint ok ) public { urnCan[msg.sender][usr] = ok; } // Open a new cdp for a given usr address. function open( bytes32 ilk, address usr ) public note returns (uint) { require(usr != address(0), "usr-address-0"); cdpi = add(cdpi, 1); urns[cdpi] = address(new UrnHandler(vat)); owns[cdpi] = usr; ilks[cdpi] = ilk; // Add new CDP to double linked list and pointers if (first[usr] == 0) { first[usr] = cdpi; } if (last[usr] != 0) { list[cdpi].prev = last[usr]; list[last[usr]].next = cdpi; } last[usr] = cdpi; count[usr] = add(count[usr], 1); emit NewCdp(msg.sender, usr, cdpi); return cdpi; } // Give the cdp ownership to a dst address. function give( uint cdp, address dst ) public note cdpAllowed(cdp) { require(dst != address(0), "dst-address-0"); require(dst != owns[cdp], "dst-already-owner"); // Remove transferred CDP from double linked list of origin user and pointers if (list[cdp].prev != 0) { list[list[cdp].prev].next = list[cdp].next; // Set the next pointer of the prev cdp (if exists) to the next of the transferred one } if (list[cdp].next != 0) { // If wasn't the last one list[list[cdp].next].prev = list[cdp].prev; // Set the prev pointer of the next cdp to the prev of the transferred one } else { // If was the last one last[owns[cdp]] = list[cdp].prev; // Update last pointer of the owner } if (first[owns[cdp]] == cdp) { // If was the first one first[owns[cdp]] = list[cdp].next; // Update first pointer of the owner } count[owns[cdp]] = sub(count[owns[cdp]], 1); // Transfer ownership owns[cdp] = dst; // Add transferred CDP to double linked list of destiny user and pointers list[cdp].prev = last[dst]; list[cdp].next = 0; if (last[dst] != 0) { list[last[dst]].next = cdp; } if (first[dst] == 0) { first[dst] = cdp; } last[dst] = cdp; count[dst] = add(count[dst], 1); } // Frob the cdp keeping the generated DAI or collateral freed in the cdp urn address. function frob( uint cdp, int dink, int dart ) public note cdpAllowed(cdp) { address urn = urns[cdp]; VatLike(vat).frob( ilks[cdp], urn, urn, urn, dink, dart ); } // Transfer wad amount of cdp collateral from the cdp address to a dst address. function flux( uint cdp, address dst, uint wad ) public note cdpAllowed(cdp) { VatLike(vat).flux(ilks[cdp], urns[cdp], dst, wad); } // Transfer wad amount of any type of collateral (ilk) from the cdp address to a dst address. // This function has the purpose to take away collateral from the system that doesn't correspond to the cdp but was sent there wrongly. function flux( bytes32 ilk, uint cdp, address dst, uint wad ) public note cdpAllowed(cdp) { VatLike(vat).flux(ilk, urns[cdp], dst, wad); } // Transfer wad amount of DAI from the cdp address to a dst address. function move( uint cdp, address dst, uint rad ) public note cdpAllowed(cdp) { VatLike(vat).move(urns[cdp], dst, rad); } // Quit the system, migrating the cdp (ink, art) to a different dst urn function quit( uint cdp, address dst ) public note cdpAllowed(cdp) urnAllowed(dst) { (uint ink, uint art) = VatLike(vat).urns(ilks[cdp], urns[cdp]); VatLike(vat).fork( ilks[cdp], urns[cdp], dst, toInt(ink), toInt(art) ); } // Import a position from src urn to the urn owned by cdp function enter( address src, uint cdp ) public note urnAllowed(src) cdpAllowed(cdp) { (uint ink, uint art) = VatLike(vat).urns(ilks[cdp], src); VatLike(vat).fork( ilks[cdp], src, urns[cdp], toInt(ink), toInt(art) ); } // Move a position from cdpSrc urn to the cdpDst urn function shift( uint cdpSrc, uint cdpDst ) public note cdpAllowed(cdpSrc) cdpAllowed(cdpDst) { require(ilks[cdpSrc] == ilks[cdpDst], "non-matching-cdps"); (uint ink, uint art) = VatLike(vat).urns(ilks[cdpSrc], urns[cdpSrc]); VatLike(vat).fork( ilks[cdpSrc], urns[cdpSrc], urns[cdpDst], toInt(ink), toInt(art) ); } } interface DSAuthority { function canCall( address src, address dst, bytes4 sig ) external view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; emit LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; emit LogSetAuthority(address(authority)); } modifier auth { require(isAuthorized(msg.sender, msg.sig), "ds-auth-unauthorized"); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, address(this), sig); } } } contract VatLike { function urns(bytes32, address) public view returns (uint, uint); function hope(address) external; function flux(bytes32, address, address, uint) public; function move(address, address, uint) public; function frob(bytes32, address, address, address, int, int) public; function fork(bytes32, address, address, int, int) public; function ilks(bytes32 ilk) public view returns(uint Art, uint rate, uint spot, uint line, uint dust); } contract CatLike { function ilks(bytes32) public returns(address flip, uint256 chop, uint256 lump); } contract EndLike { function cat() public view returns(CatLike); } contract PriceFeedLike { function read(bytes32 ilk) external view returns(bytes32); } contract LiquidationMachine is DssCdpManager, BCdpScoreConnector, Math { VatLike public vat; EndLike public end; address public pool; PriceFeedLike public real; mapping(uint => uint) public tic; // time of bite mapping(uint => uint) public cushion; // how much was topped in art units uint constant public GRACE = 1 hours; uint constant public WAD = 1e18; mapping (uint => bool) public out; modifier onlyPool { require(msg.sender == pool, "not-pool"); _; } constructor(VatLike vat_, EndLike end_, address pool_, PriceFeedLike real_) public { vat = vat_; end = end_; pool = pool_; real = real_; } function setPool(address newPool) internal { pool = newPool; } function quitBLiquidation(uint cdp) internal { untop(cdp); out[cdp] = true; } function topup(uint cdp, uint dtopup) external onlyPool { if(out[cdp]) return; address urn = urns[cdp]; bytes32 ilk = ilks[cdp]; (, uint rate,,,) = vat.ilks(ilk); uint dtab = mul(rate, dtopup); vat.move(pool, address(this), dtab); vat.frob(ilk, urn, urn, address(this), 0, -toInt(dtopup)); cushion[cdp] = add(cushion[cdp], dtopup); } function bitten(uint cdp) public view returns(bool) { return tic[cdp] + GRACE > now; } function untop(uint cdp) internal { require(! bitten(cdp), "untop: cdp was already bitten"); uint top = cushion[cdp]; if(top == 0) return; // nothing to do bytes32 ilk = ilks[cdp]; address urn = urns[cdp]; (, uint rate,,,) = vat.ilks(ilk); uint dtab = mul(rate, top); cushion[cdp] = 0; // move topping to pool vat.frob(ilk, urn, urn, urn, 0, toInt(top)); vat.move(urn, pool, dtab); } function untopByPool(uint cdp) external onlyPool { untop(cdp); } function doBite(uint dart, bytes32 ilk, address urn, uint dink) internal { (, uint rate,,,) = vat.ilks(ilk); uint dtab = mul(rate, dart); vat.move(pool, address(this), dtab); vat.frob(ilk, urn, urn, address(this), 0, -toInt(dart)); vat.frob(ilk, urn, msg.sender, urn, -toInt(dink), 0); } function calcDink(uint dart, uint rate, bytes32 ilk) internal returns(uint dink) { (, uint chop,) = end.cat().ilks(ilk); uint tab = mul(mul(dart, rate), chop) / WAD; bytes32 realtimePrice = real.read(ilk); dink = rmul(tab, WAD) / uint(realtimePrice); } function bite(uint cdp, uint dart) external onlyPool returns(uint dink){ address urn = urns[cdp]; bytes32 ilk = ilks[cdp]; (uint ink, uint art) = vat.urns(ilk, urn); art = add(art, cushion[cdp]); (, uint rate, uint spotValue,,) = vat.ilks(ilk); require(dart <= art, "debt is too low"); // verify cdp is unsafe now if(! bitten(cdp)) { require(mul(art, rate) > mul(ink, spotValue), "bite: cdp is safe"); require(cushion[cdp] > 0, "bite: not-topped"); tic[cdp] = now; } dink = calcDink(dart, rate, ilk); updateScore(cdp, ilk, -toInt(dink), -toInt(dart), now); uint usedCushion = mul(cushion[cdp], dart) / art; cushion[cdp] = sub(cushion[cdp], usedCushion); uint bart = sub(dart, usedCushion); doBite(bart, ilk, urn, dink); } } contract BCdpManager is BCdpScoreConnector, LiquidationMachine, DSAuth { constructor(address vat_, address end_, address pool_, address real_, address score_) public DssCdpManager(vat_) LiquidationMachine(VatLike(vat_), EndLike(end_), pool_, PriceFeedLike(real_)) BCdpScoreConnector(BCdpScoreLike(score_)) { } // Frob the cdp keeping the generated DAI or collateral freed in the cdp urn address. function frob( uint cdp, int dink, int dart ) public cdpAllowed(cdp) { bytes32 ilk = ilks[cdp]; untop(cdp); updateScore(cdp, ilk, dink, dart, now); super.frob(cdp, dink, dart); } // Quit the system, migrating the cdp (ink, art) to a different dst urn function quit( uint cdp, address dst ) public cdpAllowed(cdp) urnAllowed(dst) { address urn = urns[cdp]; bytes32 ilk = ilks[cdp]; untop(cdp); (uint ink, uint art) = vat.urns(ilk, urn); updateScore(cdp, ilk, -toInt(ink), -toInt(art), now); super.quit(cdp, dst); } // Import a position from src urn to the urn owned by cdp function enter( address src, uint cdp ) public urnAllowed(src) cdpAllowed(cdp) { bytes32 ilk = ilks[cdp]; untop(cdp); (uint ink, uint art) = vat.urns(ilk, src); updateScore(cdp, ilk, toInt(ink), toInt(art), now); super.enter(src, cdp); } // Move a position from cdpSrc urn to the cdpDst urn function shift( uint cdpSrc, uint cdpDst ) public cdpAllowed(cdpSrc) cdpAllowed(cdpDst) { bytes32 ilkSrc = ilks[cdpSrc]; untop(cdpSrc); untop(cdpDst); address src = urns[cdpSrc]; (uint inkSrc, uint artSrc) = vat.urns(ilkSrc, src); updateScore(cdpSrc, ilkSrc, -toInt(inkSrc), -toInt(artSrc), now); updateScore(cdpDst, ilkSrc, toInt(inkSrc), toInt(artSrc), now); super.shift(cdpSrc, cdpDst); } ///////////////// B specific control functions ///////////////////////////// function quitB(uint cdp) external cdpAllowed(cdp) note { quitScore(cdp); quitBLiquidation(cdp); } function setScoreContract(BCdpScoreLike _score) external auth { super.setScore(_score); } function setPoolContract(address _pool) external auth { super.setPool(_pool); } } contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ScoringMachine is Ownable { struct AssetScore { // total score so far uint score; // current balance uint balance; // time when last update was uint last; } // user is bytes32 (will be the sha3 of address or cdp number) mapping(bytes32 => mapping(bytes32 => AssetScore[])) public checkpoints; mapping(bytes32 => mapping(bytes32 => AssetScore)) public userScore; bytes32 constant public GLOBAL_USER = bytes32(0x0); uint public start; // start time of the campaign; function spin() external onlyOwner { // start a new round start = now; } function assetScore(AssetScore storage score, uint time, uint spinStart) internal view returns(uint) { uint last = score.last; uint currentScore = score.score; if(last < spinStart) { last = spinStart; currentScore = 0; } return add(currentScore, mul(score.balance, sub(time, last))); } function addCheckpoint(bytes32 user, bytes32 asset) internal { checkpoints[user][asset].push(userScore[user][asset]); } function updateAssetScore(bytes32 user, bytes32 asset, int dbalance, uint time) internal { AssetScore storage score = userScore[user][asset]; if(score.last < start) addCheckpoint(user, asset); score.score = assetScore(score, time, start); score.balance = add(score.balance, dbalance); score.last = time; } function updateScore(bytes32 user, bytes32 asset, int dbalance, uint time) internal { updateAssetScore(user, asset, dbalance, time); updateAssetScore(GLOBAL_USER, asset, dbalance, time); } function getScore(bytes32 user, bytes32 asset, uint time, uint spinStart, uint checkPointHint) public view returns(uint score) { if(time >= userScore[user][asset].last) return assetScore(userScore[user][asset], time, spinStart); // else - check the checkpoints uint checkpointsLen = checkpoints[user][asset].length; if(checkpointsLen == 0) return 0; // hint is invalid if(checkpoints[user][asset][checkPointHint].last < time) checkPointHint = checkpointsLen - 1; for(uint i = checkPointHint ; ; i--){ if(checkpoints[user][asset][i].last <= time) return assetScore(checkpoints[user][asset][i], time, spinStart); } // this supposed to be unreachable return 0; } function getCurrentBalance(bytes32 user, bytes32 asset) public view returns(uint balance) { balance = userScore[user][asset].balance; } // Math functions without errors // ============================== function add(uint x, uint y) internal pure returns (uint z) { z = x + y; if(!(z >= x)) return 0; return z; } function add(uint x, int y) internal pure returns (uint z) { z = x + uint(y); if(!(y >= 0 || z <= x)) return 0; if(!(y <= 0 || z >= x)) return 0; return z; } function sub(uint x, uint y) internal pure returns (uint z) { if(!(y <= x)) return 0; z = x - y; return z; } function mul(uint x, uint y) internal pure returns (uint z) { if (x == 0) return 0; z = x * y; if(!(z / x == y)) return 0; return z; } } contract BCdpScore is ScoringMachine { BCdpManager public manager; modifier onlyManager { require(msg.sender == address(manager), "not-manager"); _; } function setManager(address newManager) external onlyOwner { manager = BCdpManager(newManager); } function user(uint cdp) public pure returns(bytes32) { return keccak256(abi.encodePacked("BCdpScore", cdp)); } function artAsset(bytes32 ilk) public pure returns(bytes32) { return keccak256(abi.encodePacked("BCdpScore", "art", ilk)); } function updateScore(uint cdp, bytes32 ilk, int dink, int dart, uint time) external onlyManager { dink; // shh compiler warning updateScore(user(cdp), artAsset(ilk), dart, time); } function slashScore(uint maliciousCdp) external { address urn = manager.urns(maliciousCdp); bytes32 ilk = manager.ilks(maliciousCdp); (, uint realArt) = manager.vat().urns(ilk, urn); bytes32 maliciousUser = user(maliciousCdp); bytes32 asset = artAsset(ilk); uint left = BCdpScoreConnector(address(manager)).left(maliciousCdp); realArt = left > 0 ? 0 : realArt; uint startTime = left > 0 ? left : now; uint calculatedArt = getCurrentBalance(maliciousUser, asset); require(realArt < calculatedArt, "slashScore-cdp-is-ok"); int dart = int(realArt) - int(calculatedArt); uint time = sub(startTime, 30 days); if(time < start) time = start; updateScore(maliciousUser, asset, dart, time); } function getArtScore(uint cdp, bytes32 ilk, uint time, uint spinStart) public view returns(uint) { return getScore(user(cdp), artAsset(ilk), time, spinStart, 0); } function getArtGlobalScore(bytes32 ilk, uint time, uint spinStart) public view returns(uint) { return getScore(GLOBAL_USER, artAsset(ilk), time, spinStart, 0); } } contract JarConnector is Math { BCdpScore public score; BCdpManager public man; bytes32[] public ilks; // ilk => supported mapping(bytes32 => bool) public milks; // end of every round uint[2] public end; // start time of every round uint[2] public start; uint public round; constructor( bytes32[] memory _ilks, uint[2] memory _duration ) public { ilks = _ilks; for(uint i = 0; i < _ilks.length; i++) { milks[_ilks[i]] = true; } end[0] = now + _duration[0]; end[1] = now + _duration[0] + _duration[1]; round = 0; } function setManager(address _manager) public { require(man == BCdpManager(0), "manager-already-set"); man = BCdpManager(_manager); score = BCdpScore(address(man.score())); } // callable by anyone function spin() public { if(round == 0) { round++; score.spin(); start[0] = score.start(); } if(round == 1 && now > end[0]) { round++; score.spin(); start[1] = score.start(); } if(round == 2 && now > end[1]) { round++; // score is not counted anymore, and this must be followed by contract upgrade score.spin(); } } function getUserScore(bytes32 user) external view returns (uint) { if(round == 0) return 0; uint cdp = uint(user); bytes32 ilk = man.ilks(cdp); // Should return 0 score for unsupported ilk if( ! milks[ilk]) return 0; if(round == 1) return 2 * score.getArtScore(cdp, ilk, now, start[0]); uint firstRoundScore = 2 * score.getArtScore(cdp, ilk, start[1], start[0]); uint time = now; if(round > 2) time = end[1]; return add(score.getArtScore(cdp, ilk, time, start[1]), firstRoundScore); } function getGlobalScore() external view returns (uint) { if(round == 0) return 0; if(round == 1) return 2 * getArtGlobalScore(now, start[0]); uint firstRoundScore = 2 * getArtGlobalScore(start[1], start[0]); uint time = now; if(round > 2) time = end[1]; return add(getArtGlobalScore(time, start[1]), firstRoundScore); } function getGlobalScore(bytes32 ilk) external view returns (uint) { if(round == 0) return 0; if(round == 1) return 2 * score.getArtGlobalScore(ilk, now, start[0]); uint firstRoundScore = 2 * score.getArtGlobalScore(ilk, start[1], start[0]); uint time = now; if(round > 2) time = end[1]; return add(score.getArtGlobalScore(ilk, time, start[1]), firstRoundScore); } function getArtGlobalScore(uint time, uint spinStart) internal view returns (uint totalScore) { for(uint i = 0; i < ilks.length; i++) { totalScore = add(totalScore, score.getArtGlobalScore(ilks[i], time, spinStart)); } } function toUser(bytes32 user) external view returns (address) { return man.owns(uint(user)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"vat_","type":"address"},{"internalType":"address","name":"end_","type":"address"},{"internalType":"address","name":"pool_","type":"address"},{"internalType":"address","name":"real_","type":"address"},{"internalType":"address","name":"score_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes4","name":"sig","type":"bytes4"},{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":true,"internalType":"bytes32","name":"arg1","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"arg2","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"LogNote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":true,"internalType":"address","name":"own","type":"address"},{"indexed":true,"internalType":"uint256","name":"cdp","type":"uint256"}],"name":"NewCdp","type":"event"},{"constant":true,"inputs":[],"name":"GRACE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"internalType":"contract DSAuthority","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"uint256","name":"dart","type":"uint256"}],"name":"bite","outputs":[{"internalType":"uint256","name":"dink","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"}],"name":"bitten","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"ok","type":"uint256"}],"name":"cdpAllow","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"cdpCan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cdpi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cushion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"end","outputs":[{"internalType":"contract EndLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"uint256","name":"cdp","type":"uint256"}],"name":"enter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"first","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"ilk","type":"bytes32"},{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"flux","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"flux","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"int256","name":"dink","type":"int256"},{"internalType":"int256","name":"dart","type":"int256"}],"name":"frob","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"address","name":"dst","type":"address"}],"name":"give","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ilks","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"last","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"left","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"list","outputs":[{"internalType":"uint256","name":"prev","type":"uint256"},{"internalType":"uint256","name":"next","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"move","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"ilk","type":"bytes32"},{"internalType":"address","name":"usr","type":"address"}],"name":"open","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"out","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owns","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"address","name":"dst","type":"address"}],"name":"quit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"}],"name":"quitB","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"real","outputs":[{"internalType":"contract PriceFeedLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"score","outputs":[{"internalType":"contract BCdpScoreLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract DSAuthority","name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"setPoolContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract BCdpScoreLike","name":"_score","type":"address"}],"name":"setScoreContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdpSrc","type":"uint256"},{"internalType":"uint256","name":"cdpDst","type":"uint256"}],"name":"shift","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"},{"internalType":"uint256","name":"dtopup","type":"uint256"}],"name":"topup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"cdp","type":"uint256"}],"name":"untopByPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"ok","type":"uint256"}],"name":"urnAllow","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"urnCan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"urns","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620002a45760003560e01c80636e1bf9c91162000171578063b68f400411620000d5578063efbe1c1c1162000093578063efbe1c1c14620007ee578063efedc66914620007f8578063f69e98d71462000802578063f9f30db61462000828578063fc73d771146200085d578063fcafcc68146200088657620002a4565b8063b68f40041462000765578063bf7e214f1462000794578063c954f076146200079e578063d015e13f14620007a8578063e50322a214620007c857620002a4565b80638da5cb5b116200012f5780638da5cb5b146200068e5780639a816f7d14620006985780639bb8f83814620006c1578063abd3515c14620006f6578063b2b192e6146200072a578063b3d178f2146200075b57620002a4565b80636e1bf9c914620005be5780637a9e5e4b14620005de5780637e348b7d146200060757806380c9419e14620006365780638161b120146200066e57620002a4565b80631bb95617116200021957806345e6bdcd11620001d757806345e6bdcd14620004ce57806359c3f3e014620004fa5780635aebb46014620005235780636090dec5146200055c5780636a146024146200058b5780636d2b9f50146200059557620002a4565b80631bb9561714620004445780632726b07314620004645780632c2cb9fd14620004845780632c7d543114620004a457806336569e7714620004c457620002a4565b806313af4035116200026757806313af4035146200036557806316f0115b146200038e578063184ff47f14620003b457806318af4d6014620003da5780631b0dbf72146200041557620002a4565b806305d85eda14620002a95780630b63fb6214620002e45780630ca73735146200031b57806310b89f30146200033b578063137d29d9146200035b575b600080fd5b620002d260048036036020811015620002c157600080fd5b50356001600160a01b0316620008b5565b60405190815260200160405180910390f35b6200031960048036036060811015620002fc57600080fd5b508035906001600160a01b036020820135169060400135620008c9565b005b620002d2600480360360208110156200033357600080fd5b5035620009da565b620002d2600480360360208110156200035357600080fd5b5035620009ee565b620002d262000a02565b62000319600480360360208110156200037d57600080fd5b50356001600160a01b031662000a08565b6200039862000ab9565b6040516001600160a01b03909116815260200160405180910390f35b6200031960048036036040811015620003cc57600080fd5b508035906020013562000ac8565b6200031960048036036080811015620003f257600080fd5b508035906020810135906001600160a01b03604082013516906060013562000d7d565b62000319600480360360408110156200042d57600080fd5b50803590602001356001600160a01b031662000f0d565b620002d2600480360360208110156200045c57600080fd5b503562001160565b62000398600480360360208110156200047c57600080fd5b503562001174565b620002d2600480360360208110156200049c57600080fd5b503562001191565b6200031960048036036020811015620004bc57600080fd5b5035620011a5565b62000398620012ab565b6200031960048036036060811015620004e657600080fd5b5080359060208101359060400135620012ba565b62000319600480360360208110156200051257600080fd5b50356001600160a01b0316620013ae565b620002d2600480360360608110156200053b57600080fd5b506001600160a01b038135811691602081013591604090910135166200141c565b620002d2600480360360408110156200057457600080fd5b50803590602001356001600160a01b03166200144b565b620002d2620016f3565b6200031960048036036020811015620005ad57600080fd5b50356001600160a01b0316620016ff565b6200031960048036036020811015620005d657600080fd5b50356200176a565b6200031960048036036020811015620005f657600080fd5b50356001600160a01b0316620017bf565b62000319600480360360408110156200061f57600080fd5b506001600160a01b03813516906020013562001870565b62000656600480360360208110156200064e57600080fd5b503562001aa0565b60405191825260208201526040908101905180910390f35b62000398600480360360208110156200068657600080fd5b503562001abc565b6200039862001ad9565b620002d260048036036020811015620006b057600080fd5b50356001600160a01b031662001ae8565b6200031960048036036060811015620006d957600080fd5b508035906001600160a01b03602082013516906040013562001afc565b62000716600480360360208110156200070e57600080fd5b503562001c98565b604051901515815260200160405180910390f35b620002d2600480360360408110156200074257600080fd5b506001600160a01b038135811691602001351662001cb5565b620002d262001cd7565b62000319600480360360408110156200077d57600080fd5b506001600160a01b03813516906020013562001cdd565b6200039862001d0c565b6200039862001d1b565b6200071660048036036020811015620007c057600080fd5b503562001d2a565b6200031960048036036040811015620007e057600080fd5b508035906020013562001d41565b6200039862001fb7565b6200039862001fc6565b620002d2600480360360408110156200081a57600080fd5b508035906020013562001fd5565b62000319600480360360608110156200084057600080fd5b508035906001600160a01b03602082013516906040013562002385565b620002d2600480360360208110156200087557600080fd5b50356001600160a01b0316620024b9565b62000319600480360360408110156200089e57600080fd5b50803590602001356001600160a01b0316620024cd565b600860205280600052604060002054905081565b60008381526004602052839060409020546001600160a01b03163314806200093b57506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b6200097e5760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b60008481526004602052829060099060408120546001600160a01b0316815260208101919091526040016000206000868152602091909152604090206001600160a01b0385166000908152602091909152604090205550505050565b601160205280600052604060002054905081565b601260205280600052604060002054905081565b610e1081565b62000a20336000356001600160e01b03191662002961565b62000a685760405162461bcd60e51b8152602060048201526014602482015273191ccb585d5d1a0b5d5b985d5d1a1bdc9a5e995960621b604482015260640160405180910390fd5b601580546001600160a01b0319166001600160a01b038381169190911791829055167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b600f546001600160a01b031681565b600f546001600160a01b0316331462000b125760405162461bcd60e51b81526020600482015260086024820152671b9bdd0b5c1bdbdb60c21b604482015260640160405180910390fd5b60008281526013602052604090205460ff161562000b305762000d79565b600082815260026020526040812054600084815260056020526001600160a01b0390911691506040812054600d549091506000906001600160a01b031663d9638d36836040516001600160e01b031960e084901b168152600481019190915260240160a06040518083038186803b15801562000bab57600080fd5b505afa15801562000bc0573d6000803e3d6000fd5b505050506040513d60a081101562000bd757600080fd5b8101908080519291906020018051929190602001805192919060200180519291906020018051509496506000955062000c1a945086935089925062002a60915050565b600d54600f549192506001600160a01b039081169163bb35783b911630846040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b15801562000c8b57600080fd5b505af115801562000ca0573d6000803e3d6000fd5b5050600d546001600160a01b031691506376088703905084868030600062000cc88c62002a87565b6000036040516001600160e01b031960e089901b16815260048101969096526001600160a01b039485166024870152928416604486015292166064840152608483019190915260a482015260c401600060405180830381600087803b15801562000d3157600080fd5b505af115801562000d46573d6000803e3d6000fd5b5050506000878152601260205262000d65915060409020548662002a97565b600087815260126020526040902055505050505b5050565b60008381526004602052839060409020546001600160a01b031633148062000def57506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b62000e325760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b6000805485825260026020526001600160a01b031690636111be2e90879060409020546001600160a01b031686866040516001600160e01b031960e087901b16815260048101949094526001600160a01b039283166024850152911660448301526064820152608401600060405180830381600087803b15801562000eb657600080fd5b505af115801562000ecb573d6000803e3d6000fd5b50505050505961012081016040526020815260e0602082015260e060006040830137602435600435336001600160e01b03196000351661012085a45050505050565b60008281526004602052829060409020546001600160a01b031633148062000f7f57506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b62000fc25760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b81336001600160a01b03821614806200100357506001600160a01b0381166000908152600a6020526040902033600090815260209190915260409020546001145b620010465760405162461bcd60e51b815260206004820152600f60248201526e1d5c9b8b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b600084815260026020526040812054600086815260056020526001600160a01b039091169150604081205490506200107e8662002aa8565b600d5460009081906001600160a01b0316632424be5c84866040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401604080518083038186803b158015620010db57600080fd5b505afa158015620010f0573d6000803e3d6000fd5b505050506040513d60408110156200110757600080fd5b81019080805192919060200180519395509293506200114a92508a9150859050620011328562002a87565b600003620011408562002a87565b6000034262002d48565b62001156888862002de6565b5050505050505050565b600c60205280600052604060002054905081565b6002602052806000526040600020546001600160a01b0316905081565b600560205280600052604060002054905081565b60008181526004602052819060409020546001600160a01b03163314806200121757506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b6200125a5760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b6200126582620030eb565b620012708262003113565b5961012081016040526020815260e0602082015260e060006040830137602435600435336001600160e01b03196000351661012085a4505050565b600d546001600160a01b031681565b60008381526004602052839060409020546001600160a01b03163314806200132c57506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b6200136f5760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b60008481526005602052604081205490506200138b8562002aa8565b6200139a858286864262002d48565b620013a785858562003141565b5050505050565b620013c6336000356001600160e01b03191662002961565b6200140e5760405162461bcd60e51b8152602060048201526014602482015273191ccb585d5d1a0b5d5b985d5d1a1bdc9a5e995960621b604482015260640160405180910390fd5b6200141981620032ef565b50565b600960205282600052604060002060205281600052604060002060205280600052604060002054925083915050565b60006001600160a01b038216620014985760405162461bcd60e51b815260206004820152600d60248201526c07573722d616464726573732d3609c1b604482015260640160405180910390fd5b620014a7600154600162002a97565b6001556000546001600160a01b0316604051620014c49062003cf4565b6001600160a01b039091168152602001604051809103906000f080158015620014f1573d6000803e3d6000fd5b50600154600090815260026020526040902080546001600160a01b0319166001600160a01b03929092169190911790556001546000908152600460205282906040902080546001600160a01b0319166001600160a01b039290921691909117905560015460009081526005602052839060409020556001600160a01b038216600090815260066020526040902054620015a1576001546001600160a01b0383166000908152600660205260409020555b6001600160a01b038216600090815260076020526040902054156200161d576001600160a01b0382166000908152600760205260409020546001546000908152600360205260409020556001546001600160a01b0383166000908152600760205260039060408120548152602001908152602001600020600101555b6001546001600160a01b0383166000908152600760205260409020556001600160a01b038216600090815260086020526200165f906040902054600162002a97565b6001600160a01b0383166000908152600860205260409020556001546001600160a01b038316337fd6be0bc178658a382ff4f91c8c68b542aa6b71685b8fe427966b87745c3ea7a260405160405180910390a4506001545961012081016040526020815260e0602082015260e060006040830137602435600435336001600160e01b03196000351661012085a45092915050565b670de0b6b3a764000081565b62001717336000356001600160e01b03191662002961565b6200175f5760405162461bcd60e51b8152602060048201526014602482015273191ccb585d5d1a0b5d5b985d5d1a1bdc9a5e995960621b604482015260640160405180910390fd5b620014198162003311565b600f546001600160a01b03163314620017b45760405162461bcd60e51b81526020600482015260086024820152671b9bdd0b5c1bdbdb60c21b604482015260640160405180910390fd5b620014198162002aa8565b620017d7336000356001600160e01b03191662002961565b6200181f5760405162461bcd60e51b8152602060048201526014602482015273191ccb585d5d1a0b5d5b985d5d1a1bdc9a5e995960621b604482015260640160405180910390fd5b601480546001600160a01b0319166001600160a01b038381169190911791829055167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b81336001600160a01b0382161480620018b157506001600160a01b0381166000908152600a6020526040902033600090815260209190915260409020546001145b620018f45760405162461bcd60e51b815260206004820152600f60248201526e1d5c9b8b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b60008281526004602052829060409020546001600160a01b03163314806200196657506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b620019a95760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b6000838152600560205260408120549050620019c58462002aa8565b600d5460009081906001600160a01b0316632424be5c84896040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401604080518083038186803b15801562001a2257600080fd5b505afa15801562001a37573d6000803e3d6000fd5b505050506040513d604081101562001a4e57600080fd5b810190808051929190602001805193955092935062001a8b925088915085905062001a798562002a87565b62001a848562002a87565b4262002d48565b62001a97878762003333565b50505050505050565b6003602052806000526040600020805460019091015490915082565b6004602052806000526040600020546001600160a01b0316905081565b6015546001600160a01b031681565b600760205280600052604060002054905081565b60008381526004602052839060409020546001600160a01b031633148062001b6e57506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b62001bb15760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b6000805485825260056020526001600160a01b031690636111be2e9060409020546000878152600260205260409020546001600160a01b031686866040516001600160e01b031960e087901b16815260048101949094526001600160a01b039283166024850152911660448301526064820152608401600060405180830381600087803b15801562001c4257600080fd5b505af115801562001c57573d6000803e3d6000fd5b50505050505961012081016040526020815260e0602082015260e060006040830137602435600435336001600160e01b03196000351661012085a450505050565b6000818152601160205242610e106040832054011190505b919050565b600a602052816000526040600020602052806000526040600020549150829050565b60015481565b336000908152600a6020528190604090206001600160a01b038416600090815260209190915260409020555050565b6014546001600160a01b031681565b6010546001600160a01b031681565b60136020528060005260406000205460ff16905081565b60008281526004602052829060409020546001600160a01b031633148062001db357506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b62001df65760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b60008281526004602052829060409020546001600160a01b031633148062001e6857506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b62001eab5760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b600084815260056020526040812054905062001ec78562002aa8565b62001ed28462002aa8565b600085815260026020526040812054600d546001600160a01b039182169250600091829116632424be5c85856040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401604080518083038186803b15801562001f4357600080fd5b505afa15801562001f58573d6000803e3d6000fd5b505050506040513d604081101562001f6f57600080fd5b810190808051929190602001805193955092935062001f9a92508a9150869050620011328562002a87565b62001fab878562001a798562002a87565b6200115688886200355f565b600e546001600160a01b031681565b600b546001600160a01b031681565b600f546000906001600160a01b03163314620020225760405162461bcd60e51b81526020600482015260086024820152671b9bdd0b5c1bdbdb60c21b604482015260640160405180910390fd5b600083815260026020526040812054600085815260056020526001600160a01b0390911691506040812054600d5490915060009081906001600160a01b0316632424be5c84866040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401604080518083038186803b158015620020ad57600080fd5b505afa158015620020c2573d6000803e3d6000fd5b505050506040513d6040811015620020d957600080fd5b810190808051929190602001805160008c8152601260205294965094506200210c93859350604092509050205462002a97565b600d5490915060009081906001600160a01b031663d9638d36866040516001600160e01b031960e084901b168152600481019190915260240160a06040518083038186803b1580156200215e57600080fd5b505afa15801562002173573d6000803e3d6000fd5b505050506040513d60a08110156200218a57600080fd5b810190808051929190602001805192919060200180519291906020018051929190602001805150949750929550505050848a111591506200220590505760405162461bcd60e51b815260206004820152600f60248201526e6465627420697320746f6f206c6f7760881b604482015260640160405180910390fd5b620022108962001c98565b620022d95762002221848262002a60565b6200222d848462002a60565b11620022735760405162461bcd60e51b8152602060048201526011602482015270626974653a20636470206973207361666560781b604482015260640160405180910390fd5b60008981526012602052604081205411620022c75760405162461bcd60e51b815260206004820152601060248201526f189a5d194e881b9bdd0b5d1bdc1c195960821b604482015260640160405180910390fd5b60008981526011602052429060409020555b620022e688838762003850565b9650620023078986620022f98a62002a87565b600003620011408c62002a87565b60008981526012602052836200232260408320548b62002a60565b816200232a57fe5b60008c8152601260205291900491506200234a9060409020548262003a3f565b60008b8152601260205260409020556000620023678a8362003a3f565b90506200237781888a8c62003a50565b505050505050505092915050565b60008381526004602052839060409020546001600160a01b0316331480620023f757506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b6200243a5760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b6000805485825260026020526001600160a01b03169063bb35783b9060409020546001600160a01b031685856040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b15801562001c4257600080fd5b600660205280600052604060002054905081565b60008281526004602052829060409020546001600160a01b03163314806200253f57506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b620025825760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b6001600160a01b038216620025cd5760405162461bcd60e51b815260206004820152600d60248201526c06473742d616464726573732d3609c1b604482015260640160405180910390fd5b6000838152600460205260409020546001600160a01b0383811691161415620026305760405162461bcd60e51b81526020600482015260116024820152703239ba16b0b63932b0b23c96b7bbb732b960791b604482015260640160405180910390fd5b600083815260036020526040902054156200267f576000838152600360205260409020600101546000848152600360208190529060408120600001548152602001908152602001600020600101555b60008381526003602052604090206001015415620026d0576000838152600360205260409020546000848152600360208190529060408120600101548152602001908152602001600020556200270c565b6000838152600360205260409020546000848152600460205260079060408120546001600160a01b031681526020810191909152604001600020555b60008381526004602052839060069060408120546001600160a01b03168152602081019190915260400160002054141562002780576000838152600360205260409020600101546000848152600460205260069060408120546001600160a01b031681526020810191909152604001600020555b60008381526004602052620027b99060089060408120546001600160a01b03168152602081019190915260400160002054600162003a3f565b6000848152600460205260089060408120546001600160a01b031681526020810191909152604001600020556000838152600460205282906040902080546001600160a01b0319166001600160a01b0392831617905582166000908152600760205260409020546000848152600360205260409020556000838152600360205260408120600101556001600160a01b0382166000908152600760205260409020541562002891576001600160a01b03821660009081526007602052839060039060408120548152602001908152602001600020600101555b6001600160a01b038216600090815260066020526040902054620028cb576001600160a01b03821660009081526006602052839060409020555b6001600160a01b03821660009081526007602052839060409020556001600160a01b038216600090815260086020526200290c906040902054600162002a97565b6001600160a01b038316600090815260086020526040902055505961012081016040526020815260e0602082015260e060006040830137602435600435336001600160e01b03196000351661012085a4505050565b60006001600160a01b0383163014156200297e5750600162002a5a565b6015546001600160a01b03848116911614156200299e5750600162002a5a565b6014546001600160a01b0316620029b85750600062002a5a565b6014546001600160a01b031663b70096138430856040516001600160e01b031960e086901b811682526001600160a01b03948516600483015292909316602484015216604482015260640160206040518083038186803b15801562002a1c57600080fd5b505afa15801562002a31573d6000803e3d6000fd5b505050506040513d602081101562002a4857600080fd5b810190808051935062002a5a92505050565b92915050565b600081158062002a7d5750508082028282828162002a7a57fe5b04145b62002a5a57600080fd5b80600081121562001cb057600080fd5b8082018281101562002a5a57600080fd5b62002ab38162001c98565b1562002b055760405162461bcd60e51b815260206004820152601d60248201527f756e746f703a206364702077617320616c72656164792062697474656e000000604482015260640160405180910390fd5b60008181526012602052604081205490508062002b23575062001419565b600082815260056020526040812054600084815260026020529091506040812054600d546001600160a01b0391821692506000911663d9638d36846040516001600160e01b031960e084901b168152600481019190915260240160a06040518083038186803b15801562002b9657600080fd5b505afa15801562002bab573d6000803e3d6000fd5b505050506040513d60a081101562002bc257600080fd5b8101908080519291906020018051929190602001805192919060200180519291906020018051509496506000955062002c05945086935089925062002a60915050565b600087815260126020529091506040812055600d546001600160a01b0316637608870385858080600062002c398c62002a87565b6040516001600160e01b031960e089901b16815260048101969096526001600160a01b039485166024870152928416604486015292166064840152608483019190915260a482015260c401600060405180830381600087803b15801562002c9f57600080fd5b505af115801562002cb4573d6000803e3d6000fd5b5050600d54600f546001600160a01b03918216935063bb35783b9250869116846040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b15801562002d2757600080fd5b505af115801562002d3c573d6000803e3d6000fd5b50505050505050505050565b6000858152600c6020526040902054620013a757600b546001600160a01b031663de9b921886868686866040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b15801562002dc657600080fd5b505af115801562002ddb573d6000803e3d6000fd5b505050505050505050565b60008281526004602052829060409020546001600160a01b031633148062002e5857506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b62002e9b5760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b81336001600160a01b038216148062002edc57506001600160a01b0381166000908152600a6020526040902033600090815260209190915260409020546001145b62002f1f5760405162461bcd60e51b815260206004820152600f60248201526e1d5c9b8b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b60008054858252600560205281906001600160a01b0316632424be5c60408320546000898152600260205260409020546001600160a01b03166040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401604080518083038186803b15801562002f9d57600080fd5b505afa15801562002fb2573d6000803e3d6000fd5b505050506040513d604081101562002fc957600080fd5b8101908080519291906020018051600080548c825260056020529597509095506001600160a01b039094169363870c616d935060409250905020546000898152600260205260409020546001600160a01b031688620030288762002a87565b620030338762002a87565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529190921660448401526064830191909152608482015260a401600060405180830381600087803b1580156200309357600080fd5b505af1158015620030a8573d6000803e3d6000fd5b50505050505050505961012081016040526020815260e0602082015260e060006040830137602435600435336001600160e01b03196000351661012085a4505050565b6000818152600c602052604090205462001419576000818152600c6020524290604090205550565b6200311e8162002aa8565b6000818152601360205260019060409020805460ff191691151591909117905550565b60008381526004602052839060409020546001600160a01b0316331480620031b357506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b620031f65760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b6000848152600260205260408120546000805487825260056020526001600160a01b03928316935090911690637608870390604090205483848589896040516001600160e01b031960e089901b16815260048101969096526001600160a01b039485166024870152928416604486015292166064840152608483019190915260a482015260c401600060405180830381600087803b1580156200329857600080fd5b505af1158015620032ad573d6000803e3d6000fd5b5050505050505961012081016040526020815260e0602082015260e060006040830137602435600435336001600160e01b03196000351661012085a450505050565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b81336001600160a01b03821614806200337457506001600160a01b0381166000908152600a6020526040902033600090815260209190915260409020546001145b620033b75760405162461bcd60e51b815260206004820152600f60248201526e1d5c9b8b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b60008281526004602052829060409020546001600160a01b03163314806200342957506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b6200346c5760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b60008054848252600560205281906001600160a01b0316632424be5c6040832054886040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401604080518083038186803b158015620034d357600080fd5b505afa158015620034e8573d6000803e3d6000fd5b505050506040513d6040811015620034ff57600080fd5b8101908080519291906020018051600080548b825260056020529597509095506001600160a01b039094169363870c616d9350604092509050205460008881526002602052899060409020546001600160a01b0316620030288762002a87565b60008281526004602052829060409020546001600160a01b0316331480620035d157506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b620036145760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b60008281526004602052829060409020546001600160a01b03163314806200368657506000818152600460205260099060408120546001600160a01b03168152602081019190915260400160002060008281526020919091526040902033600090815260209190915260409020546001145b620036c95760405162461bcd60e51b815260206004820152600f60248201526e18d91c0b5b9bdd0b585b1b1bddd959608a1b604482015260640160405180910390fd5b600083815260056020526040902054600085815260056020526040902054146200372d5760405162461bcd60e51b81526020600482015260116024820152706e6f6e2d6d61746368696e672d6364707360781b604482015260640160405180910390fd5b60008054858252600560205281906001600160a01b0316632424be5c60408320546000898152600260205260409020546001600160a01b03166040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401604080518083038186803b158015620037ab57600080fd5b505afa158015620037c0573d6000803e3d6000fd5b505050506040513d6040811015620037d757600080fd5b8101908080519291906020018051600080548c825260056020529597509095506001600160a01b039094169363870c616d93506040925090502054600089815260026020526040902054600089815260026020526001600160a01b039091169060409020546001600160a01b0316620030288762002a87565b600e5460009081906001600160a01b031663e48818136040518163ffffffff1660e01b815260040160206040518083038186803b1580156200389157600080fd5b505afa158015620038a6573d6000803e3d6000fd5b505050506040513d6020811015620038bd57600080fd5b8101908080516001600160a01b0316925063d9638d3691508590506040516001600160e01b031960e084901b1681526004810191909152602401606060405180830381600087803b1580156200391257600080fd5b505af115801562003927573d6000803e3d6000fd5b505050506040513d60608110156200393e57600080fd5b810190808051929190602001805192919060200180515092945060009350670de0b6b3a764000092506200398291506200397b9050888862002a60565b8462002a60565b816200398a57fe5b60105491900491506000906001600160a01b03166361da1439866040516001600160e01b031960e084901b168152600481019190915260240160206040518083038186803b158015620039dc57600080fd5b505afa158015620039f1573d6000803e3d6000fd5b505050506040513d602081101562003a0857600080fd5b810190808051935083925062003a2b9150849050670de0b6b3a764000062003cc9565b8162003a3357fe5b04979650505050505050565b8082038281111562002a5a57600080fd5b600d546000906001600160a01b031663d9638d36856040516001600160e01b031960e084901b168152600481019190915260240160a06040518083038186803b15801562003a9d57600080fd5b505afa15801562003ab2573d6000803e3d6000fd5b505050506040513d60a081101562003ac957600080fd5b8101908080519291906020018051929190602001805192919060200180519291906020018051509496506000955062003b0c94508693508a925062002a60915050565b600d54600f549192506001600160a01b039081169163bb35783b911630846040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b15801562003b7d57600080fd5b505af115801562003b92573d6000803e3d6000fd5b5050600d546001600160a01b031691506376088703905086868030600062003bba8d62002a87565b6000036040516001600160e01b031960e089901b16815260048101969096526001600160a01b039485166024870152928416604486015292166064840152608483019190915260a482015260c401600060405180830381600087803b15801562003c2357600080fd5b505af115801562003c38573d6000803e3d6000fd5b5050600d546001600160a01b03169150637608870390508686338162003c5e8962002a87565b60000360006040516001600160e01b031960e089901b16815260048101969096526001600160a01b039485166024870152928416604486015292166064840152608483019190915260a482015260c401600060405180830381600087803b15801562002d2757600080fd5b60006b033b2e3c9fd0803ce800000062003ce4848462002a60565b8162003cec57fe5b049392505050565b60da8062003d028339019056fe6080604052348015600f57600080fd5b5060405160da38038060da83398181016040526020811015602f57600080fd5b5051604080516328ec8bf160e21b815233600482015290516001600160a01b0383169163a3b22fc491602480830192600092919082900301818387803b158015607757600080fd5b505af1158015608a573d6000803e3d6000fd5b5050505050603e80609c6000396000f3fe6080604052600080fdfea265627a7a72315820df81610215f223940057ef8135c6b744125cbd0767bbe9c83db3e68d50b37cf064736f6c63430005100032a265627a7a72315820a68c0c567b1eccc5264dd5f3de7f4ab7f3b0612ff895d3d94d1eacc9b887e8a264736f6c63430005100032
Deployed Bytecode Sourcemap
19814:2519:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19814:2519:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7061:38;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7061:38:0;-1:-1:-1;;;;;7061:38:0;;:::i;:::-;;;;;;;;;;;;;;;8505:158;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8505:158:0;;;-1:-1:-1;;;;;8505:158:0;;;;;;;;;;:::i;:::-;;16344:36;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16344:36:0;;:::i;16404:40::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16404:40:0;;:::i;16489:48::-;;;:::i;14485:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14485:136:0;-1:-1:-1;;;;;14485:136:0;;:::i;16254:37::-;;;:::i;:::-;;;-1:-1:-1;;;;;16254:37:0;;;;;;;;;;;;;;17116:418;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17116:418:0;;;;;;;:::i;12202:193::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;12202:193:0;;;;;;;;-1:-1:-1;;;;;12202:193:0;;;;;;;;;;:::i;20606:348::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20606:348:0;;;;;;-1:-1:-1;;;;;20606:348:0;;:::i;5845:33::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5845:33:0;;:::i;6609:37::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6609:37:0;;:::i;6849:::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6849:37:0;;:::i;21998:120::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21998:120:0;;:::i;16168:36::-;;;:::i;20266:255::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20266:255:0;;;;;;;;;;;;:::i;22237:93::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22237:93:0;-1:-1:-1;;;;;22237:93:0;;:::i;7139:150::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7139:150:0;;;;;;;;;;;;;;;;;:::i;8914:692::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8914:692:0;;;;;;-1:-1:-1;;;;;8914:692:0;;:::i;16544:43::-;;;:::i;22126:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22126:103:0;-1:-1:-1;;;;;22126:103:0;;:::i;18155:78::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18155:78:0;;:::i;14629:173::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14629:173:0;-1:-1:-1;;;;;14629:173:0;;:::i;21025:314::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21025:314:0;;;;;;;;:::i;6681:37::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6681:37:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6782;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6782:37:0;;:::i;14345:26::-;;;:::i;6989:37::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6989:37:0;-1:-1:-1;;;;;6989:37:0;;:::i;11777:177::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11777:177:0;;;-1:-1:-1;;;;;11777:177:0;;;;;;;;;;:::i;17542:100::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17542:100:0;;:::i;:::-;;;;;;;;;;;;;;;;;7373;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7373:100:0;;;;;;;;;;:::i;6540:37::-;;;:::i;8739:119::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8739:119:0;;;;;;;;:::i;14308:30::-;;;:::i;16298:37::-;;;:::i;16596:36::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16596:36:0;;:::i;21405:501::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21405:501:0;;;;;;;:::i;16211:36::-;;;:::i;5812:26::-;;;:::i;18893:912::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18893:912:0;;;;;;;:::i;12477:166::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12477:166:0;;;-1:-1:-1;;;;;12477:166:0;;;;;;;;;;:::i;6916:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6916:38:0;-1:-1:-1;;;;;6916:38:0;;:::i;9663:1619::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9663:1619:0;;;;;;-1:-1:-1;;;;;9663:1619:0;;:::i;7061:38::-;;;;;;;;;;;;-1:-1:-1;7061:38:0;:::o;8505:158::-;7774:9;;;;:4;:9;;8607:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;8623:17;8630:9;;;:4;:9;;8653:2;;8623:6;;8630:9;8623:17;8630:9;;-1:-1:-1;;;;;8630:9:0;8623:17;;;;;;;;;;;8630:9;8623:17;:22;;;;;;;;;;;;-1:-1:-1;;;;;8623:27:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;8505:158:0:o;16344:36::-;;;;;;;;;;;;-1:-1:-1;16344:36:0;:::o;16404:40::-;;;;;;;;;;;;-1:-1:-1;16404:40:0;:::o;16489:48::-;16530:7;16489:48;:::o;14485:136::-;14843:33;14856:10;14868:7;;-1:-1:-1;;;;;;14868:7:0;14843:12;:33::i;:::-;14835:66;;;;-1:-1:-1;;;14835:66:0;;;;;;;;;;;;-1:-1:-1;;;14835:66:0;;;;;;;;;;;;;;14565:5;:14;;-1:-1:-1;;;;;;14565:14:0;-1:-1:-1;;;;;14565:14:0;;;;;;;;;;;14607:5;14595:18;;;;;;;;;;14485:136;:::o;16254:37::-;;;-1:-1:-1;;;;;16254:37:0;;:::o;17116:418::-;16692:4;;-1:-1:-1;;;;;16692:4:0;16678:10;:18;16670:39;;;;-1:-1:-1;;;16670:39:0;;;;;;;;;;;;-1:-1:-1;;;16670:39:0;;;;;;;;;;;;;;17186:8;;;;:3;:8;;;;;;;;17183:20;;;17196:7;;17183:20;17215:11;17229:9;;;:4;:9;;;17215:11;17229:9;;;17263;;;:4;:9;;-1:-1:-1;;;;;17229:9:0;;;;-1:-1:-1;17263:9:0;17229;17263;;17304:3;;17263:9;;-1:-1:-1;17288:9:0;;-1:-1:-1;;;;;17304:3:0;:8;17263:9;17304:13;;-1:-1:-1;;;;;;17304:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17304:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17304:13:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17304:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17285:32:0;;-1:-1:-1;17328:9:0;;-1:-1:-1;17340:17:0;;-1:-1:-1;17285:32:0;;-1:-1:-1;17350:6:0;;-1:-1:-1;17340:3:0;;-1:-1:-1;;17340:17:0:i;:::-;17370:3;;17379:4;;17328:29;;-1:-1:-1;;;;;;17370:3:0;;;;:8;;17379:4;17393;17328:29;17370:35;;-1:-1:-1;;;;;;17370:35:0;;;;;;;-1:-1:-1;;;;;17370:35:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17370:35:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17370:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;17416:3:0;;-1:-1:-1;;;;;17416:3:0;;-1:-1:-1;17416:8:0;;-1:-1:-1;17425:3:0;17430;;17448:4;17416:3;17459:13;17465:6;17459:5;:13::i;:::-;17458:14;;17416:57;;-1:-1:-1;;;;;;17416:57:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17416:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17416:57:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17416:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;17505:12:0;;;;:7;:12;;17501:25;;-1:-1:-1;17505:12:0;;;;17519:6;17501:3;:25::i;:::-;17486:12;;;;:7;:12;;;;;:40;-1:-1:-1;;;;16720:1:0;17116:418;;:::o;12202:193::-;7774:9;;;;:4;:9;;12328:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;12352:3;;;12367:9;;;:4;:9;;-1:-1:-1;;;;;12352:3:0;;12344:17;;12362:3;;12367:9;;;;-1:-1:-1;;;;;12367:9:0;12378:3;12383;12344:43;;-1:-1:-1;;;;;;12344:43:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12344:43:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;12344:43:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12344:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12344:43:0;;;;4711:1;4909:7;5005:3;4999:4;4995:14;4989:4;4982:28;5080:4;5074;5067:18;5172:3;5165:4;5159;5155:15;5148:28;5259:3;5256:1;5249:4;5243;5239:15;5226:37;5581:2;5568:16;5518:1;5505:15;5436:8;-1:-1:-1;;;;;;5401:1:0;5388:15;5370:35;5309:3;5303:4;5298:333;4732:910;;;;;:::o;20606:348::-;7774:9;;;;:4;:9;;20686:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;20702:3;7942:10;-1:-1:-1;;;;;7942:17:0;;;;:49;;-1:-1:-1;;;;;;7963:11:0;;;;;;:6;:11;;;;;7975:10;7963:23;;;;;;;;;;;;;7990:1;7963:28;7942:49;7934:77;;;;-1:-1:-1;;;7934:77:0;;;;;;;;;;;;-1:-1:-1;;;7934:77:0;;;;;;;;;;;;;;20718:11;20732:9;;;:4;:9;;;20718:11;20732:9;;;20766;;;:4;:9;;-1:-1:-1;;;;;20732:9:0;;;;-1:-1:-1;20766:9:0;20732;20766;;20752:23;;20788:10;20794:3;20788:5;:10::i;:::-;20832:3;;20810:8;;;;-1:-1:-1;;;;;20832:3:0;:8;20841:3;20846;20832:18;;-1:-1:-1;;;;;;20832:18:0;;;;;;;;;;;;;;-1:-1:-1;;;;;20832:18:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20832:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20832:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20832:18:0;;;;;;;;;;;;;20809:41;;-1:-1:-1;20832:18:0;;-1:-1:-1;20861:52:0;;-1:-1:-1;20873:3:0;;-1:-1:-1;20878:3:0;;-1:-1:-1;20884:10:0;20809:41;20884:5;:10::i;:::-;20883:11;;20897:10;20903:3;20897:5;:10::i;:::-;20896:11;;20909:3;20861:11;:52::i;:::-;20926:20;20937:3;20942;20926:10;:20::i;:::-;8022:1;;;;7857;20606:348;;;:::o;5845:33::-;;;;;;;;;;;;-1:-1:-1;5845:33:0;:::o;6609:37::-;;;;;;;;;;;-1:-1:-1;;;;;6609:37:0;;-1:-1:-1;6609:37:0;:::o;6849:::-;;;;;;;;;;;;-1:-1:-1;6849:37:0;:::o;21998:120::-;7774:9;;;;:4;:9;;22043:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;22064:14;22074:3;22064:9;:14::i;:::-;22089:21;22106:3;22089:16;:21::i;:::-;4909:7;5005:3;4999:4;4995:14;4989:4;4982:28;5080:4;5074;5067:18;5172:3;5165:4;5159;5155:15;5148:28;5259:3;5256:1;5249:4;5243;5239:15;5226:37;5581:2;5568:16;5518:1;5505:15;5436:8;-1:-1:-1;;;;;;5401:1:0;5388:15;5370:35;5309:3;5303:4;5298:333;4732:910;21998:120;;:::o;16168:36::-;;;-1:-1:-1;;;;;16168:36:0;;:::o;20266:255::-;7774:9;;;;:4;:9;;20362:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;20378:11;20392:9;;;:4;:9;;;20378:11;20392:9;;20378:23;;20414:10;20420:3;20414:5;:10::i;:::-;20435:38;20447:3;20452;20457:4;20463;20469:3;20435:11;:38::i;:::-;20486:27;20497:3;20502:4;20508;20486:10;:27::i;:::-;7857:1;20266:255;;;;:::o;22237:93::-;14843:33;14856:10;14868:7;;-1:-1:-1;;;;;;14868:7:0;14843:12;:33::i;:::-;14835:66;;;;-1:-1:-1;;;14835:66:0;;;;;;;;;;;;-1:-1:-1;;;14835:66:0;;;;;;;;;;;;;;22302:20;22316:5;22302:13;:20::i;:::-;22237:93;:::o;7139:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7139:150:0;;-1:-1:-1;;7139:150:0:o;8914:692::-;9000:4;-1:-1:-1;;;;;9025:17:0;;9017:43;;;;-1:-1:-1;;;9017:43:0;;;;;;;;;;;;-1:-1:-1;;;9017:43:0;;;;;;;;;;;;;;9080:12;9084:4;;9090:1;9080:3;:12::i;:::-;9073:4;:19;9139:3;;-1:-1:-1;;;;;9139:3:0;9124:19;;;;;:::i;:::-;-1:-1:-1;;;;;9124:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;9108:4:0;;9103:10;;;;:4;:10;;;;;:41;;-1:-1:-1;;;;;;9103:41:0;-1:-1:-1;;;;;9103:41:0;;;;;;;;;;-1:-1:-1;9160:4:0;-1:-1:-1;9155:10:0;;;:4;:10;;9168:3;;9155:10;;;:16;;-1:-1:-1;;;;;;9155:16:0;-1:-1:-1;;;;;9155:16:0;;;;;;;;;;-1:-1:-1;9187:4:0;-1:-1:-1;9182:10:0;;;:4;:10;;9195:3;;9182:10;;;:16;-1:-1:-1;;;;;9274:10:0;;;;;;:5;:10;;;;;;9270:65;;9319:4;;-1:-1:-1;;;;;9306:10:0;;;;;;:5;:10;;;;;:17;9270:65;-1:-1:-1;;;;;9349:9:0;;;;;;:4;:9;;;;;;:14;9345:116;;-1:-1:-1;;;;;9398:9:0;;;;;;:4;:9;;;;;;9385:4;;9380:10;;;;:4;:10;;;;;:27;9445:4;;-1:-1:-1;;;;;9427:9:0;;9380:15;9427:9;;;:4;:9;;9422:4;;9427:9;9380:15;9427:9;;9422:15;;;;;;;;;;;:20;;:27;9345:116;9483:4;;-1:-1:-1;;;;;9471:9:0;;;;;;:4;:9;;;;;:16;-1:-1:-1;;;;;9515:10:0;;;;;;:5;:10;;9511:18;;9515:10;;;;9527:1;9511:3;:18::i;:::-;-1:-1:-1;;;;;9498:10:0;;;;;;:5;:10;;;;;:31;9571:4;;-1:-1:-1;;;;;9547:29:0;;9554:10;9547:29;;;;;;;;;;-1:-1:-1;9594:4:0;;4909:7;5005:3;4999:4;4995:14;4989:4;4982:28;5080:4;5074;5067:18;5172:3;5165:4;5159;5155:15;5148:28;5259:3;5256:1;5249:4;5243;5239:15;5226:37;5581:2;5568:16;5518:1;5505:15;5436:8;-1:-1:-1;;;;;;5401:1:0;5388:15;5370:35;5309:3;5303:4;5298:333;4732:910;;;;;:::o;16544:43::-;16583:4;16544:43;:::o;22126:103::-;14843:33;14856:10;14868:7;;-1:-1:-1;;;;;;14868:7:0;14843:12;:33::i;:::-;14835:66;;;;-1:-1:-1;;;14835:66:0;;;;;;;;;;;;-1:-1:-1;;;14835:66:0;;;;;;;;;;;;;;22199:22;22214:6;22199:14;:22::i;18155:78::-;16692:4;;-1:-1:-1;;;;;16692:4:0;16678:10;:18;16670:39;;;;-1:-1:-1;;;16670:39:0;;;;;;;;;;;;-1:-1:-1;;;16670:39:0;;;;;;;;;;;;;;18215:10;18221:3;18215:5;:10::i;14629:173::-;14843:33;14856:10;14868:7;;-1:-1:-1;;;;;;14868:7:0;14843:12;:33::i;:::-;14835:66;;;;-1:-1:-1;;;14835:66:0;;;;;;;;;;;;-1:-1:-1;;;14835:66:0;;;;;;;;;;;;;;14721:9;:22;;-1:-1:-1;;;;;;14721:22:0;-1:-1:-1;;;;;14721:22:0;;;;;;;;;;;14783:9;14759:35;;;;;;;;;;14629:173;:::o;21025:314::-;21106:3;7942:10;-1:-1:-1;;;;;7942:17:0;;;;:49;;-1:-1:-1;;;;;;7963:11:0;;;;;;:6;:11;;;;;7975:10;7963:23;;;;;;;;;;;;;7990:1;7963:28;7942:49;7934:77;;;;-1:-1:-1;;;7934:77:0;;;;;;;;;;;;-1:-1:-1;;;7934:77:0;;;;;;;;;;;;;;7774:9;;;;:4;:9;;21122:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;21138:11;21152:9;;;:4;:9;;;21138:11;21152:9;;21138:23;;21174:10;21180:3;21174:5;:10::i;:::-;21218:3;;21196:8;;;;-1:-1:-1;;;;;21218:3:0;:8;21227:3;21232;21218:18;;-1:-1:-1;;;;;;21218:18:0;;;;;;;;;;;;;;-1:-1:-1;;;;;21218:18:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21218:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21218:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21218:18:0;;;;;;;;;;;;;21195:41;;-1:-1:-1;21218:18:0;;-1:-1:-1;21247:50:0;;-1:-1:-1;21259:3:0;;-1:-1:-1;21264:3:0;;-1:-1:-1;21269:10:0;21195:41;21269:5;:10::i;:::-;21281;21287:3;21281:5;:10::i;:::-;21293:3;21247:11;:50::i;:::-;21310:21;21322:3;21327;21310:11;:21::i;:::-;7857:1;;;8022;21025:314;;;:::o;6681:37::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;6681:37:0;:::o;6782:::-;;;;;;;;;;;-1:-1:-1;;;;;6782:37:0;;-1:-1:-1;6782:37:0;:::o;14345:26::-;;;-1:-1:-1;;;;;14345:26:0;;:::o;6989:37::-;;;;;;;;;;;;-1:-1:-1;6989:37:0;:::o;11777:177::-;7774:9;;;;:4;:9;;11881:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;11905:3;;;11915:9;;;:4;:9;;-1:-1:-1;;;;;11905:3:0;;11897:17;;11915:9;;;;11926;;;;:4;:9;;;;;;-1:-1:-1;;;;;11926:9:0;11937:3;11942;11897:49;;-1:-1:-1;;;;;;11897:49:0;;;;;;;;;;;;;;-1:-1:-1;;;;;11897:49:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;11897:49:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11897:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11897:49:0;;;;4711:1;4909:7;5005:3;4999:4;4995:14;4989:4;4982:28;5080:4;5074;5067:18;5172:3;5165:4;5159;5155:15;5148:28;5259:3;5256:1;5249:4;5243;5239:15;5226:37;5581:2;5568:16;5518:1;5505:15;5436:8;-1:-1:-1;;;;;;5401:1:0;5388:15;5370:35;5309:3;5303:4;5298:333;4732:910;;;;:::o;17542:100::-;17588:4;17612:8;;;:3;:8;;17631:3;16530:7;17612:8;17588:4;17612:8;;:16;:22;17605:29;;17542:100;;;;:::o;7373:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7373:100:0;;-1:-1:-1;7373:100:0:o;6540:37::-;;;;:::o;8739:119::-;8829:10;8822:18;;;;:6;:18;;8848:2;;8822:18;;;-1:-1:-1;;;;;8822:23:0;;;;;;;;;;;;;;:28;-1:-1:-1;;8739:119:0:o;14308:30::-;;;-1:-1:-1;;;;;14308:30:0;;:::o;16298:37::-;;;-1:-1:-1;;;;;16298:37:0;;:::o;16596:36::-;;;;;;;;;;;;;;-1:-1:-1;16596:36:0;:::o;21405:501::-;7774:9;;;;:4;:9;;21489:6;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;7774:9;;;;:4;:9;;21508:6;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;21527:14;21544:12;;;:4;:12;;;21527:14;21544:12;;21527:29;;21569:13;21575:6;21569:5;:13::i;:::-;21593;21599:6;21593:5;:13::i;:::-;21619:11;21633:12;;;:4;:12;;;21619:11;21633:12;;21687:3;;-1:-1:-1;;;;;21633:12:0;;;;-1:-1:-1;21633:12:0;;;;21687:3;:8;21696:6;21633:12;21687:21;;-1:-1:-1;;;;;;21687:21:0;;;;;;;;;;;;;;-1:-1:-1;;;;;21687:21:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21687:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21687:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21687:21:0;;;;;;;;;;;;;21658:50;;-1:-1:-1;21687:21:0;;-1:-1:-1;21721:64:0;;-1:-1:-1;21733:6:0;;-1:-1:-1;21741:6:0;;-1:-1:-1;21750:13:0;21658:50;21750:5;:13::i;21721:64::-;21796:62;21808:6;21816;21824:13;21830:6;21824:5;:13::i;21796:62::-;21871:27;21883:6;21891;21871:11;:27::i;16211:36::-;;;-1:-1:-1;;;;;16211:36:0;;:::o;5812:26::-;;;-1:-1:-1;;;;;5812:26:0;;:::o;18893:912::-;16692:4;;18954:9;;-1:-1:-1;;;;;16692:4:0;16678:10;:18;16670:39;;;;-1:-1:-1;;;16670:39:0;;;;;;;;;;;;-1:-1:-1;;;16670:39:0;;;;;;;;;;;;;;18975:11;18989:9;;;:4;:9;;;18975:11;18989:9;;;19023;;;:4;:9;;-1:-1:-1;;;;;18989:9:0;;;;-1:-1:-1;19023:9:0;18989;19023;;19068:3;;19023:9;;-1:-1:-1;19046:8:0;;;;-1:-1:-1;;;;;19068:3:0;:8;19023:9;19082:3;19068:18;;-1:-1:-1;;;;;;19068:18:0;;;;;;;;;;;;;;-1:-1:-1;;;;;19068:18:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19068:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19068:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19068:18:0;;;;;;;;;;;;;19112:12;;;;:7;19068:18;19112:12;19045:41;;-1:-1:-1;19068:18:0;-1:-1:-1;19103:22:0;;19068:18;;-1:-1:-1;19112:12:0;;-1:-1:-1;19112:12:0;-1:-1:-1;19112:12:0;;19103:3;:22::i;:::-;19170:3;;19097:28;;-1:-1:-1;19139:9:0;;;;-1:-1:-1;;;;;19170:3:0;:8;19179:3;19170:13;;-1:-1:-1;;;;;;19170:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19170:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19170:13:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;19170:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19136:47:0;;-1:-1:-1;19136:47:0;;-1:-1:-1;;;;19204:11:0;;;;;-1:-1:-1;19196:39:0;;-1:-1:-1;19196:39:0;;;-1:-1:-1;;;19196:39:0;;;;;;;;;;;;-1:-1:-1;;;19196:39:0;;;;;;;;;;;;;;19290:11;19297:3;19290:6;:11::i;:::-;19285:200;;19343:19;19347:3;19352:9;19343:3;:19::i;:::-;19326:14;19330:3;19335:4;19326:3;:14::i;:::-;:36;19318:66;;;;-1:-1:-1;;;19318:66:0;;;;;;;;;;;;-1:-1:-1;;;19318:66:0;;;;;;;;;;;;;;19422:1;19407:12;;;:7;:12;;;19422:1;19407:12;;:16;19399:45;;;;-1:-1:-1;;;19399:45:0;;;;;;;;;;;;-1:-1:-1;;;19399:45:0;;;;;;;;;;;;;;19459:8;;;;:3;:8;;19470:3;;19459:8;;;:14;19285:200;19504:25;19513:4;19519;19525:3;19504:8;:25::i;:::-;19497:32;;19540:54;19552:3;19557;19563:11;19569:4;19563:5;:11::i;:::-;19562:12;;19577:11;19583:4;19577:5;:11::i;19540:54::-;19607:16;19630:12;;;:7;:12;;19652:3;19626:23;19630:12;19607:16;19630:12;;19644:4;19626:3;:23::i;:::-;:29;;;;;19685:12;;;;:7;:12;;19626:29;;;;-1:-1:-1;19681:30:0;;19685:12;;;;19699:11;19681:3;:30::i;:::-;19666:12;;;;:7;:12;;;;;:45;19722:9;19734:22;19738:4;19744:11;19734:3;:22::i;:::-;19722:34;;19769:28;19776:4;19782:3;19787;19792:4;19769:6;:28::i;:::-;16720:1;;;;;;;;18893:912;;;;:::o;12477:166::-;7774:9;;;;:4;:9;;12581:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;12605:3;;;12615:9;;;:4;:9;;-1:-1:-1;;;;;12605:3:0;;12597:17;;12615:9;;;;-1:-1:-1;;;;;12615:9:0;12626:3;12631;12597:38;;-1:-1:-1;;;;;;12597:38:0;;;;;;;-1:-1:-1;;;;;12597:38:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12597:38:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;6916:38:0;;;;;;;;;;;;-1:-1:-1;6916:38:0;:::o;9663:1619::-;7774:9;;;;:4;:9;;9748:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9772:17:0;;9764:43;;;;-1:-1:-1;;;9764:43:0;;;;;;;;;;;;-1:-1:-1;;;9764:43:0;;;;;;;;;;;;;;9833:9;;;;:4;:9;;;;;;-1:-1:-1;;;;;9826:16:0;;;9833:9;;9826:16;;9818:46;;;;-1:-1:-1;;;9818:46:0;;;;;;;;;;;;-1:-1:-1;;;9818:46:0;;;;;;;;;;;;;;9968:9;;;;:4;:9;;;;;:14;:19;9964:189;;10032:9;;;;:4;:9;;;;;:14;;;10004:20;10009:9;;;10004:4;10009:9;;;;10004:4;10009:9;10004:20;10009:9;:14;;;10004:20;;;;;;;;;;;:25;;:42;9964:189;10167:9;;;;:4;:9;;;;;:14;;;:19;10163:421;;10286:9;;;;:4;:9;;;;;:14;;10263:9;;;10258:4;10263:9;;;;10258:4;10263:9;10286:14;10263:9;:14;;;10258:20;;;;;;;;;;;:42;10163:421;;;10504:9;;;;:4;:9;;;;;:14;;10491:9;;;:4;:9;;10486:4;;10491:9;10504:14;10491:9;;-1:-1:-1;;;;;10491:9:0;10486:15;;;;;;;;;;;10491:9;10486:15;:32;10163:421;10598:16;10604:9;;;:4;:9;;10618:3;;10598:5;;10604:9;10598:16;10604:9;;-1:-1:-1;;;;;10604:9:0;10598:16;;;;;;;;;;;10604:9;10598:16;;:23;10594:192;;;10706:9;;;;:4;:9;;;;;:14;;;10687:16;10693:9;;;:4;:9;;10687:5;;10693:9;10687:16;10693:9;;-1:-1:-1;;;;;10693:9:0;10687:16;;;;;;;;;;;10693:9;10687:16;:33;10594:192;10819:16;10825:9;;;:4;:9;;10815:24;;10819:5;;10825:9;10819:16;10825:9;;-1:-1:-1;;;;;10825:9:0;10819:16;;;;;;;;;;;10825:9;10819:16;;10837:1;10815:3;:24::i;:::-;10796:16;10802:9;;;:4;:9;;10796:5;;10802:9;10796:16;10802:9;;-1:-1:-1;;;;;10802:9:0;10796:16;;;;;;;;;;;10802:9;10796:16;:43;10883:9;;;;:4;:9;;10895:3;;10883:9;;;:15;;-1:-1:-1;;;;;;10883:15:0;-1:-1:-1;;;;;10883:15:0;;;;;;11011:9;;-1:-1:-1;11011:9:0;;;:4;:9;;;;;;10994;;;;:4;:9;;;;;:26;:14;11031:9;;;:4;:9;;;10994:14;11031:9;:14;;:18;-1:-1:-1;;;;;11064:9:0;;;;;;:4;:9;;;;;;:14;11060:73;;-1:-1:-1;;;;;11100:9:0;;11095:15;11100:9;;;:4;:9;;11118:3;;11095:4;;11100:9;11095:15;11100:9;;11095:15;;;;;;;;;;;:20;;:26;11060:73;-1:-1:-1;;;;;11147:10:0;;;;;;:5;:10;;;;;;11143:64;;-1:-1:-1;;;;;11179:10:0;;;;;;:5;:10;;11192:3;;11179:10;;;:16;11143:64;-1:-1:-1;;;;;11217:9:0;;;;;;:4;:9;;11229:3;;11217:9;;;:15;-1:-1:-1;;;;;11260:10:0;;;;;;:5;:10;;11256:18;;11260:10;;;;11272:1;11256:3;:18::i;:::-;-1:-1:-1;;;;;11243:10:0;;;;;;:5;:10;;;;;:31;-1:-1:-1;4909:7:0;5005:3;4999:4;4995:14;4989:4;4982:28;5080:4;5074;5067:18;5172:3;5165:4;5159;5155:15;5148:28;5259:3;5256:1;5249:4;5243;5239:15;5226:37;5581:2;5568:16;5518:1;5505:15;5436:8;-1:-1:-1;;;;;;5401:1:0;5388:15;5370:35;5309:3;5303:4;5298:333;4732:910;;;:::o;14929:380::-;14999:4;-1:-1:-1;;;;;15020:20:0;;15035:4;15020:20;15016:286;;;-1:-1:-1;15064:4:0;15057:11;;15016:286;15097:5;;-1:-1:-1;;;;;15090:12:0;;;15097:5;;15090:12;15086:216;;;-1:-1:-1;15126:4:0;15119:11;;15086:216;15152:9;;-1:-1:-1;;;;;15152:9:0;15148:154;;-1:-1:-1;15203:5:0;15196:12;;15148:154;15248:9;;-1:-1:-1;;;;;15248:9:0;:17;15266:3;15279:4;15286:3;15248:42;;-1:-1:-1;;;;;;15248:42:0;;;;;;;;-1:-1:-1;;;;;15248:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15248:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15248:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15248:42:0;;;;;;;-1:-1:-1;15241:49:0;;-1:-1:-1;;;15241:49:0;15148:154;14929:380;;;;:::o;3068:118::-;3120:6;3147;;;:30;;-1:-1:-1;;3162:5:0;;;3176:1;3171;3162:5;3171:1;3157:15;;;;;:20;3147:30;3139:39;;;;;4343:108;4415:1;4389:5;4436:6;;;4428:15;;;;;2848:104;2932:5;;;2927:16;;;;2919:25;;;;;17650:497;17705:11;17712:3;17705:6;:11::i;:::-;17703:13;17695:55;;;;-1:-1:-1;;;17695:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;17763:8;17774:12;;;:7;:12;;;17763:8;17774:12;;;-1:-1:-1;17800:8:0;17797:20;;17810:7;;;17797:20;17846:11;17860:9;;;:4;:9;;;17846:11;17860:9;;17880:11;17894:9;;;:4;:9;;17860;;-1:-1:-1;17894:9:0;17880:11;17894:9;;17935:3;;-1:-1:-1;;;;;17894:9:0;;;;-1:-1:-1;17894:9:0;;17935:3;:8;17944:3;17935:13;;-1:-1:-1;;;;;;17935:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17935:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17935:13:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17935:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17916:32:0;;-1:-1:-1;17959:9:0;;-1:-1:-1;17971:14:0;;-1:-1:-1;17916:32:0;;-1:-1:-1;17981:3:0;;-1:-1:-1;17971:3:0;;-1:-1:-1;;17971:14:0:i;:::-;18013:1;17998:12;;;:7;:12;;17959:26;;-1:-1:-1;17998:12:0;18013:1;17998:12;:16;18060:3;;-1:-1:-1;;;;;18060:3:0;:8;18069:3;18074;;;18060;18092:10;18098:3;18092:5;:10::i;:::-;18060:43;;-1:-1:-1;;;;;;18060:43:0;;;;;;;;;;;;;;-1:-1:-1;;;;;18060:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18060:43:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18060:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;18114:3:0;;18128:4;;-1:-1:-1;;;;;18114:3:0;;;;-1:-1:-1;18114:8:0;;-1:-1:-1;18123:3:0;;18128:4;18134;18114:25;;-1:-1:-1;;;;;;18114:25:0;;;;;;;-1:-1:-1;;;;;18114:25:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18114:25:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18114:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18114:25:0;;;;17650:497;;;;;;:::o;6065:167::-;6163:9;;;;:4;:9;;;;;;6160:64;;6179:5;;-1:-1:-1;;;;;6179:5:0;:17;6197:3;6202;6207:4;6213;6219;6179:45;;-1:-1:-1;;;;;;6179:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6179:45:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6179:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6179:45:0;;;;6065:167;;;;;:::o;12728:342::-;7774:9;;;;:4;:9;;12813:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;12829:3;7942:10;-1:-1:-1;;;;;7942:17:0;;;;:49;;-1:-1:-1;;;;;;7963:11:0;;;;;;:6;:11;;;;;7975:10;7963:23;;;;;;;;;;;;;7990:1;7963:28;7942:49;7934:77;;;;-1:-1:-1;;;7934:77:0;;;;;;;;;;;;-1:-1:-1;;;7934:77:0;;;;;;;;;;;;;;12846:8;12876:3;;12886:9;;;:4;:9;;12846:8;;-1:-1:-1;;;;;12876:3:0;12868:17;12886:9;12846:8;12886:9;;12897;;;;:4;:9;;;;;;-1:-1:-1;;;;;12897:9:0;12868:39;;-1:-1:-1;;;;;;12868:39:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12868:39:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12868:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12868:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12868:39:0;;;;;;;;;;;;;12926:3;;;12950:9;;;:4;12868:39;12950:9;12845:62;;-1:-1:-1;12868:39:0;;-1:-1:-1;;;;;;12926:3:0;;;;12918:17;;-1:-1:-1;12950:9:0;;-1:-1:-1;12926:3:0;-1:-1:-1;12950:9:0;;12974;;;;:4;:9;;;;;;-1:-1:-1;;;;;12974:9:0;12998:3;13016:10;13022:3;13016:5;:10::i;:::-;13041;13047:3;13041:5;:10::i;:::-;12918:144;;-1:-1:-1;;;;;;12918:144:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12918:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12918:144:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12918:144:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12918:144:0;;;;8022:1;;7857;4711;4909:7;5005:3;4999:4;4995:14;4989:4;4982:28;5080:4;5074;5067:18;5172:3;5165:4;5159;5155:15;5148:28;5259:3;5256:1;5249:4;5243;5239:15;5226:37;5581:2;5568:16;5518:1;5505:15;5436:8;-1:-1:-1;;;;;;5401:1:0;5388:15;5370:35;5309:3;5303:4;5298:333;4732:910;;;:::o;6240:91::-;6292:9;;;;:4;:9;;;;;;6289:34;;6308:9;;;;:4;:9;;6320:3;;6308:9;;;:15;6240:91;:::o;17008:100::-;17064:10;17070:3;17064:5;:10::i;:::-;17085:8;;;;:3;:8;;17096:4;;17085:8;;;:15;;-1:-1:-1;;17085:15:0;;;;;;;;;;-1:-1:-1;17008:100:0:o;11381:303::-;7774:9;;;;:4;:9;;11482:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;11498:11;11512:9;;;:4;:9;;;11498:11;11512:9;;;11540:3;;11564:9;;;:4;:9;;-1:-1:-1;;;;;11512:9:0;;;;-1:-1:-1;11540:3:0;;;;11532:17;;11564:9;;;;11588:3;11606;11624;11642:4;11661;11532:144;;-1:-1:-1;;;;;;11532:144:0;;;;;;;;;;;;;;-1:-1:-1;;;;;11532:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11532:144:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11532:144:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11532:144:0;;;;7857:1;4711;4909:7;5005:3;4999:4;4995:14;4989:4;4982:28;5080:4;5074;5067:18;5172:3;5165:4;5159;5155:15;5148:28;5259:3;5256:1;5249:4;5243;5239:15;5226:37;5581:2;5568:16;5518:1;5505:15;5436:8;-1:-1:-1;;;;;;5401:1:0;5388:15;5370:35;5309:3;5303:4;5298:333;4732:910;;;;:::o;16924:76::-;16978:4;:14;;-1:-1:-1;;;;;;16978:14:0;-1:-1:-1;;;;;16978:14:0;;;;;;;;;;16924:76::o;5969:88::-;6032:5;:17;;-1:-1:-1;;;;;;6032:17:0;-1:-1:-1;;;;;6032:17:0;;;;;;;;;;5969:88::o;13141:337::-;13227:3;7942:10;-1:-1:-1;;;;;7942:17:0;;;;:49;;-1:-1:-1;;;;;;7963:11:0;;;;;;:6;:11;;;;;7975:10;7963:23;;;;;;;;;;;;;7990:1;7963:28;7942:49;7934:77;;;;-1:-1:-1;;;7934:77:0;;;;;;;;;;;;-1:-1:-1;;;7934:77:0;;;;;;;;;;;;;;7774:9;;;;:4;:9;;13243:3;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;13260:8;13290:3;;13300:9;;;:4;:9;;13260:8;;-1:-1:-1;;;;;13290:3:0;13282:17;13300:9;13260:8;13300:9;;13311:3;13282:33;;-1:-1:-1;;;;;;13282:33:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13282:33:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13282:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13282:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13282:33:0;;;;;;;;;;;;;13334:3;;;13358:9;;;:4;13282:33;13358:9;13259:56;;-1:-1:-1;13282:33:0;;-1:-1:-1;;;;;;13334:3:0;;;;13326:17;;-1:-1:-1;13358:9:0;;-1:-1:-1;13334:3:0;-1:-1:-1;13358:9:0;;13400;;;;:4;:9;;13382:3;;13400:9;;;;-1:-1:-1;;;;;13400:9:0;13424:10;13430:3;13424:5;:10::i;13544:442::-;7774:9;;;;:4;:9;;13633:6;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;7774:9;;;;:4;:9;;13652:6;;7774:9;;;;-1:-1:-1;;;;;7774:9:0;7760:10;:23;;:66;;-1:-1:-1;7787:17:0;7794:9;;;:4;:9;;7787:6;;7794:9;7787:17;7794:9;;-1:-1:-1;;;;;7794:9:0;7787:17;;;;;;;;;;;7794:9;7787:17;:22;;;;;;;;;;;;7810:10;7787:34;;;;;;;;;;;;;7825:1;7787:39;7760:66;7752:94;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;-1:-1:-1;;;7752:94:0;;;;;;;;;;;;;;13695:12;;;;:4;:12;;;;;;13679;;;;:4;:12;;;;;;:28;13671:58;;;;-1:-1:-1;;;13671:58:0;;;;;;;;;;;;-1:-1:-1;;;13671:58:0;;;;;;;;;;;;;;13741:8;13771:3;;13781:12;;;:4;:12;;13741:8;;-1:-1:-1;;;;;13771:3:0;13763:17;13781:12;13741:8;13781:12;;13795;;;;:4;:12;;;;;;-1:-1:-1;;;;;13795:12:0;13763:45;;-1:-1:-1;;;;;;13763:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13763:45:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13763:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13763:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13763:45:0;;;;;;;;;;;;;13827:3;;;13851:12;;;:4;13763:45;13851:12;13740:68;;-1:-1:-1;13763:45:0;;-1:-1:-1;;;;;;13827:3:0;;;;13819:17;;-1:-1:-1;13851:12:0;;-1:-1:-1;13827:3:0;-1:-1:-1;13851:12:0;;13878;;;;:4;:12;;;;;;;13905;;;:4;:12;;-1:-1:-1;;;;;13878:12:0;;;;13905;;;;-1:-1:-1;;;;;13905:12:0;13932:10;13938:3;13932:5;:10::i;18590:295::-;18699:3;;18660:9;;;;-1:-1:-1;;;;;18699:3:0;:7;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;18699:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18699:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18699:9:0;;;;;;-1:-1:-1;;;;;18699:14:0;;-1:-1:-1;18699:14:0;;-1:-1:-1;18714:3:0;;-1:-1:-1;18699:19:0;;-1:-1:-1;;;;;;18699:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18699:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18699:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18699:19:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18682:36:0;;-1:-1:-1;18729:8:0;;-1:-1:-1;16583:4:0;;-1:-1:-1;18740:26:0;;-1:-1:-1;18744:15:0;;-1:-1:-1;18748:4:0;18754;18744:3;:15::i;:::-;18761:4;18740:3;:26::i;:::-;:32;;;;;18807:4;;18740:32;;;;-1:-1:-1;18783:21:0;;-1:-1:-1;;;;;18807:4:0;:9;18817:3;18807:14;;-1:-1:-1;;;;;;18807:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18807:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18807:14:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18807:14:0;;;;;;;-1:-1:-1;18807:14:0;;-1:-1:-1;18841:14:0;;-1:-1:-1;18846:3:0;;-1:-1:-1;16583:4:0;18841;:14::i;:::-;:36;;;;;;;18590:295;-1:-1:-1;;;;;;;18590:295:0:o;2958:104::-;3042:5;;;3037:16;;;;3029:25;;;;;18241:341;18344:3;;18328:9;;-1:-1:-1;;;;;18344:3:0;:8;18353:3;18344:13;;-1:-1:-1;;;;;;18344:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18344:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18344:13:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18344:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18325:32:0;;-1:-1:-1;18368:9:0;;-1:-1:-1;18380:15:0;;-1:-1:-1;18325:32:0;;-1:-1:-1;18390:4:0;;-1:-1:-1;18380:3:0;;-1:-1:-1;;18380:15:0:i;:::-;18408:3;;18417:4;;18368:27;;-1:-1:-1;;;;;;18408:3:0;;;;:8;;18417:4;18431;18368:27;18408:35;;-1:-1:-1;;;;;;18408:35:0;;;;;;;-1:-1:-1;;;;;18408:35:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18408:35:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18408:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;18456:3:0;;-1:-1:-1;;;;;18456:3:0;;-1:-1:-1;18456:8:0;;-1:-1:-1;18465:3:0;18470;;18488:4;18456:3;18499:11;18505:4;18499:5;:11::i;:::-;18498:12;;18456:55;;-1:-1:-1;;;;;;18456:55:0;;;;;;;;;;;;;;-1:-1:-1;;;;;18456:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18456:55:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18456:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;18522:3:0;;-1:-1:-1;;;;;18522:3:0;;-1:-1:-1;18522:8:0;;-1:-1:-1;18531:3:0;18536;18541:10;18536:3;18559:11;18565:4;18559:5;:11::i;:::-;18558:12;;18572:1;18522:52;;-1:-1:-1;;;;;;18522:52:0;;;;;;;;;;;;;;-1:-1:-1;;;;;18522:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18522:52:0;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;3336:99:0;3389:6;3214:8;3412:9;3416:1;3419;3412:3;:9::i;:::-;:15;;;;;;;3336:99;-1:-1:-1;;;3336:99:0:o;19814:2519::-;;;;;;;;:::o
Swarm Source
bzzr://a68c0c567b1eccc5264dd5f3de7f4ab7f3b0612ff895d3d94d1eacc9b887e8a2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.