false
true
0

Contract Address Details

0xc67fA7EcA0627D2417d1eB4c030b9499Cd5910f0

Contract Name
Vat
Creator
0xbcaee0–64cea5 at 0xc93453–24ab42
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
25862779
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
Vat




Optimization enabled
true
Compiler version
v0.6.12+commit.27d51765




Optimization runs
200
EVM Version
istanbul




Verified at
2026-02-18T10:29:03.976154Z

Contract.sol

// SPDX-License-Identifier: AGPL-3.0-or-later

/// vat.sol -- Dai CDP database

pragma solidity ^0.6.12;

contract Vat {
    // --- Auth ---
    mapping (address => uint) public wards;
    function rely(address usr) external auth { require(live == 1, "Vat/not-live"); wards[usr] = 1; emit Rely(usr); }
    function deny(address usr) external auth { require(live == 1, "Vat/not-live"); wards[usr] = 0; emit Deny(usr); }
    modifier auth {
        require(wards[msg.sender] == 1, "Vat/not-authorized");
        _;
    }

    mapping(address => mapping (address => uint)) public can;
    function hope(address usr) external { can[msg.sender][usr] = 1; emit Hope(msg.sender, usr); }
    function nope(address usr) external { can[msg.sender][usr] = 0; emit Nope(msg.sender, usr); }
    function wish(address bit, address usr) internal view returns (bool) {
        return either(bit == usr, can[bit][usr] == 1);
    }

    // --- Data ---
    struct Ilk {
        uint256 Art;   // Total Normalised Debt     [wad]
        uint256 rate;  // Accumulated Rates         [ray]
        uint256 spot;  // Price with Safety Margin  [ray]
        uint256 line;  // Debt Ceiling              [rad]
        uint256 dust;  // Urn Debt Floor            [rad]
    }
    struct Urn {
        uint256 ink;   // Locked Collateral  [wad]
        uint256 art;   // Normalised Debt    [wad]
    }

    mapping (bytes32 => Ilk)                       public ilks;
    mapping (bytes32 => mapping (address => Urn))  public urns;
    mapping (bytes32 => mapping (address => uint)) public gem;  // [wad]
    mapping (address => uint256)                   public dai;  // [rad]
    mapping (address => uint256)                   public sin;  // [rad]

    uint256 public debt;  // Total Dai Issued    [rad]
    uint256 public vice;  // Total Unbacked Dai  [rad]
    uint256 public Line;  // Total Debt Ceiling  [rad]
    uint256 public live;  // Active Flag

    // --- Events ---
    event Rely(address indexed usr);
    event Deny(address indexed usr);
    event Hope(address indexed src, address indexed usr);
    event Nope(address indexed src, address indexed usr);
    event Init(bytes32 indexed ilk);
    event File(bytes32 indexed what, uint256 data);
    event File(bytes32 indexed ilk, bytes32 indexed what, uint256 data);
    event Cage();
    event Slip(bytes32 indexed ilk, address indexed usr, int256 wad);
    event Flux(bytes32 indexed ilk, address indexed src, address indexed dst, uint256 wad);
    event Move(address indexed src, address indexed dst, uint256 rad);
    event Frob(bytes32 indexed ilk, address indexed u, address v, address w, int256 dink, int256 dart);
    event Fork(bytes32 indexed ilk, address indexed src, address indexed dst, int256 dink, int256 dart);
    event Grab(bytes32 indexed ilk, address indexed u, address v, address w, int256 dink, int256 dart);
    event Heal(address indexed usr, uint256 rad);
    event Suck(address indexed u, address indexed v, uint256 rad);
    event Fold(bytes32 indexed ilk, address indexed u, int256 rate);

    // --- Init ---
    constructor() public {
        wards[msg.sender] = 1;
        live = 1;
        emit Rely(msg.sender);
    }

    // --- 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);
    }

    // --- Administration ---
    function init(bytes32 ilk) external auth {
        require(ilks[ilk].rate == 0, "Vat/ilk-already-init");
        ilks[ilk].rate = 10 ** 27;
        emit Init(ilk);
    }
    function file(bytes32 what, uint data) external auth {
        require(live == 1, "Vat/not-live");
        if (what == "Line") Line = data;
        else revert("Vat/file-unrecognized-param");
        emit File(what, data);
    }
    function file(bytes32 ilk, bytes32 what, uint data) external auth {
        require(live == 1, "Vat/not-live");
        if (what == "spot") ilks[ilk].spot = data;
        else if (what == "line") ilks[ilk].line = data;
        else if (what == "dust") ilks[ilk].dust = data;
        else revert("Vat/file-unrecognized-param");
        emit File(ilk, what, data);
    }
    function cage() external auth {
        live = 0;
        emit Cage();
    }

    // --- Fungibility ---
    function slip(bytes32 ilk, address usr, int256 wad) external auth {
        gem[ilk][usr] = _add(gem[ilk][usr], wad);
        emit Slip(ilk, usr, wad);
    }
    function flux(bytes32 ilk, address src, address dst, uint256 wad) external {
        require(wish(src, msg.sender), "Vat/not-allowed");
        gem[ilk][src] = _sub(gem[ilk][src], wad);
        gem[ilk][dst] = _add(gem[ilk][dst], wad);
        emit Flux(ilk, src, dst, wad);
    }
    function move(address src, address dst, uint256 rad) external {
        require(wish(src, msg.sender), "Vat/not-allowed");
        dai[src] = _sub(dai[src], rad);
        dai[dst] = _add(dai[dst], rad);
        emit Move(src, dst, rad);
    }

    function either(bool x, bool y) internal pure returns (bool z) {
        assembly { z := or(x, y) }
    }
    function both(bool x, bool y) internal pure returns (bool z) {
        assembly { z := and(x, y) }
    }

    // --- CDP Manipulation ---
    function frob(bytes32 i, address u, address v, address w, int dink, int dart) external {
        require(live == 1, "Vat/not-live");
        Urn memory urn = urns[i][u];
        Ilk memory ilk = ilks[i];
        require(ilk.rate != 0, "Vat/ilk-not-init");

        urn.ink = _add(urn.ink, dink);
        urn.art = _add(urn.art, dart);
        ilk.Art = _add(ilk.Art, dart);

        int dtab = _mul(ilk.rate, dart);
        uint tab = _mul(ilk.rate, urn.art);
        debt = _add(debt, dtab);

        require(either(dart <= 0, both(_mul(ilk.Art, ilk.rate) <= ilk.line, debt <= Line)), "Vat/ceiling-exceeded");
        require(either(both(dart <= 0, dink >= 0), tab <= _mul(urn.ink, ilk.spot)), "Vat/not-safe");
        require(either(both(dart <= 0, dink >= 0), wish(u, msg.sender)), "Vat/not-allowed-u");
        require(either(dink <= 0, wish(v, msg.sender)), "Vat/not-allowed-v");
        require(either(dart >= 0, wish(w, msg.sender)), "Vat/not-allowed-w");
        require(either(urn.art == 0, tab >= ilk.dust), "Vat/dust");

        gem[i][v] = _sub(gem[i][v], dink);
        dai[w] = _add(dai[w], dtab);

        urns[i][u] = urn;
        ilks[i] = ilk;
        emit Frob(i, u, v, w, dink, dart);
    }

    // --- CDP Fungibility ---
    function fork(bytes32 ilk, address src, address dst, int dink, int dart) external {
        Urn storage u = urns[ilk][src];
        Urn storage v = urns[ilk][dst];
        Ilk storage i = ilks[ilk];

        u.ink = _sub(u.ink, dink);
        u.art = _sub(u.art, dart);
        v.ink = _add(v.ink, dink);
        v.art = _add(v.art, dart);

        uint utab = _mul(u.art, i.rate);
        uint vtab = _mul(v.art, i.rate);

        require(both(wish(src, msg.sender), wish(dst, msg.sender)), "Vat/not-allowed");
        require(utab <= _mul(u.ink, i.spot), "Vat/not-safe-src");
        require(vtab <= _mul(v.ink, i.spot), "Vat/not-safe-dst");
        require(either(utab >= i.dust, u.art == 0), "Vat/dust-src");
        require(either(vtab >= i.dust, v.art == 0), "Vat/dust-dst");

        emit Fork(ilk, src, dst, dink, dart);
    }

    // --- CDP Confiscation ---
    function grab(bytes32 i, address u, address v, address w, int dink, int dart) external auth {
        Urn storage urn = urns[i][u];
        Ilk storage ilk = ilks[i];

        urn.ink = _add(urn.ink, dink);
        urn.art = _add(urn.art, dart);
        ilk.Art = _add(ilk.Art, dart);

        int dtab = _mul(ilk.rate, dart);

        gem[i][v] = _sub(gem[i][v], dink);
        sin[w] = _sub(sin[w], dtab);
        vice = _sub(vice, dtab);

        emit Grab(i, u, v, w, dink, dart);
    }

    // --- Settlement ---
    function heal(uint rad) external {
        address u = msg.sender;
        sin[u] = _sub(sin[u], rad);
        dai[u] = _sub(dai[u], rad);
        vice = _sub(vice, rad);
        debt = _sub(debt, rad);
        emit Heal(u, rad);
    }

    function suck(address u, address v, uint rad) external auth {
        sin[u] = _add(sin[u], rad);
        dai[v] = _add(dai[v], rad);
        vice = _add(vice, rad);
        debt = _add(debt, rad);
        emit Suck(u, v, rad);
    }

    // --- Rates ---
    function fold(bytes32 i, address u, int rate) external auth {
        require(live == 1, "Vat/not-live");
        Ilk storage ilk = ilks[i];
        ilk.rate = _add(ilk.rate, rate);
        int rad = _mul(ilk.Art, rate);
        dai[u] = _add(dai[u], rad);
        debt = _add(debt, rad);
        emit Fold(i, u, rate);
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"Contract.sol":"Vat"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Cage","inputs":[],"anonymous":false},{"type":"event","name":"Deny","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"File","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32","indexed":true},{"type":"uint256","name":"data","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"File","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"what","internalType":"bytes32","indexed":true},{"type":"uint256","name":"data","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Flux","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"dst","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Fold","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"u","internalType":"address","indexed":true},{"type":"int256","name":"rate","internalType":"int256","indexed":false}],"anonymous":false},{"type":"event","name":"Fork","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"dst","internalType":"address","indexed":true},{"type":"int256","name":"dink","internalType":"int256","indexed":false},{"type":"int256","name":"dart","internalType":"int256","indexed":false}],"anonymous":false},{"type":"event","name":"Frob","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"u","internalType":"address","indexed":true},{"type":"address","name":"v","internalType":"address","indexed":false},{"type":"address","name":"w","internalType":"address","indexed":false},{"type":"int256","name":"dink","internalType":"int256","indexed":false},{"type":"int256","name":"dart","internalType":"int256","indexed":false}],"anonymous":false},{"type":"event","name":"Grab","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"u","internalType":"address","indexed":true},{"type":"address","name":"v","internalType":"address","indexed":false},{"type":"address","name":"w","internalType":"address","indexed":false},{"type":"int256","name":"dink","internalType":"int256","indexed":false},{"type":"int256","name":"dart","internalType":"int256","indexed":false}],"anonymous":false},{"type":"event","name":"Heal","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"rad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Hope","inputs":[{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Init","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"Move","inputs":[{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"dst","internalType":"address","indexed":true},{"type":"uint256","name":"rad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Nope","inputs":[{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Rely","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Slip","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32","indexed":true},{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"int256","name":"wad","internalType":"int256","indexed":false}],"anonymous":false},{"type":"event","name":"Suck","inputs":[{"type":"address","name":"u","internalType":"address","indexed":true},{"type":"address","name":"v","internalType":"address","indexed":true},{"type":"uint256","name":"rad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"Line","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cage","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"can","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"dai","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"debt","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deny","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"file","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"bytes32","name":"what","internalType":"bytes32"},{"type":"uint256","name":"data","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"file","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32"},{"type":"uint256","name":"data","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"flux","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"address","name":"src","internalType":"address"},{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"fold","inputs":[{"type":"bytes32","name":"i","internalType":"bytes32"},{"type":"address","name":"u","internalType":"address"},{"type":"int256","name":"rate","internalType":"int256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"fork","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"address","name":"src","internalType":"address"},{"type":"address","name":"dst","internalType":"address"},{"type":"int256","name":"dink","internalType":"int256"},{"type":"int256","name":"dart","internalType":"int256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"frob","inputs":[{"type":"bytes32","name":"i","internalType":"bytes32"},{"type":"address","name":"u","internalType":"address"},{"type":"address","name":"v","internalType":"address"},{"type":"address","name":"w","internalType":"address"},{"type":"int256","name":"dink","internalType":"int256"},{"type":"int256","name":"dart","internalType":"int256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gem","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"grab","inputs":[{"type":"bytes32","name":"i","internalType":"bytes32"},{"type":"address","name":"u","internalType":"address"},{"type":"address","name":"v","internalType":"address"},{"type":"address","name":"w","internalType":"address"},{"type":"int256","name":"dink","internalType":"int256"},{"type":"int256","name":"dart","internalType":"int256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"heal","inputs":[{"type":"uint256","name":"rad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"hope","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"Art","internalType":"uint256"},{"type":"uint256","name":"rate","internalType":"uint256"},{"type":"uint256","name":"spot","internalType":"uint256"},{"type":"uint256","name":"line","internalType":"uint256"},{"type":"uint256","name":"dust","internalType":"uint256"}],"name":"ilks","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"init","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"live","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"move","inputs":[{"type":"address","name":"src","internalType":"address"},{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"rad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"nope","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rely","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sin","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"slip","inputs":[{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"address","name":"usr","internalType":"address"},{"type":"int256","name":"wad","internalType":"int256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"suck","inputs":[{"type":"address","name":"u","internalType":"address"},{"type":"address","name":"v","internalType":"address"},{"type":"uint256","name":"rad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"ink","internalType":"uint256"},{"type":"uint256","name":"art","internalType":"uint256"}],"name":"urns","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"vice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"wards","inputs":[{"type":"address","name":"","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b5033600081815260208190526040808220600190819055600a55517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a2611f948061005e6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637cdd3fde116100f9578063bb35783b11610097578063dc4d20fa11610071578063dc4d20fa146105bb578063f059212a146105e1578063f24e23eb14610607578063f37ac61c1461063d576101c4565b8063bb35783b14610517578063bf353dbb1461054d578063d9638d3614610573576101c4565b80639c52a7f1116100d35780639c52a7f114610491578063a3b22fc4146104b7578063b65337df146104dd578063babe8a3f1461050f576101c4565b80637cdd3fde14610415578063870c616d14610447578063957aa58c14610489576101c4565b80634538c4eb11610166578063692450091161014057806369245009146103575780636c25b3461461035f57806376088703146103855780637bab3f40146103cd576101c4565b80634538c4eb146102c75780636111be2e146102f557806365fae35e14610331576101c4565b80632424be5c116101a25780632424be5c1461023a57806329ae81141461027f5780632d61a355146102a25780633b663195146102aa576101c4565b80630dca59c1146101c95780631a0b287e146101e3578063214414d51461020e575b600080fd5b6101d161065a565b60408051918252519081900360200190f35b61020c600480360360608110156101f957600080fd5b5080359060208101359060400135610660565b005b6101d16004803603604081101561022457600080fd5b50803590602001356001600160a01b03166107fa565b6102666004803603604081101561025057600080fd5b50803590602001356001600160a01b0316610817565b6040805192835260208301919091528051918290030190f35b61020c6004803603604081101561029557600080fd5b508035906020013561083b565b6101d1610921565b61020c600480360360208110156102c057600080fd5b5035610927565b6101d1600480360360408110156102dd57600080fd5b506001600160a01b0381358116916020013516610a1f565b61020c6004803603608081101561030b57600080fd5b508035906001600160a01b03602082013581169160408101359091169060600135610a3c565b61020c6004803603602081101561034757600080fd5b50356001600160a01b0316610b52565b61020c610c2f565b6101d16004803603602081101561037557600080fd5b50356001600160a01b0316610cb1565b61020c600480360360c081101561039b57600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a00135610cc3565b61020c600480360360c08110156103e357600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a00135611241565b61020c6004803603606081101561042b57600080fd5b508035906001600160a01b0360208201351690604001356113fc565b61020c600480360360a081101561045d57600080fd5b508035906001600160a01b036020820135811691604081013590911690606081013590608001356114df565b6101d16117a9565b61020c600480360360208110156104a757600080fd5b50356001600160a01b03166117af565b61020c600480360360208110156104cd57600080fd5b50356001600160a01b031661188b565b61020c600480360360608110156104f357600080fd5b508035906001600160a01b0360208201351690604001356118de565b6101d1611a3d565b61020c6004803603606081101561052d57600080fd5b506001600160a01b03813581169160208101359091169060400135611a43565b6101d16004803603602081101561056357600080fd5b50356001600160a01b0316611b3e565b6105906004803603602081101561058957600080fd5b5035611b50565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b61020c600480360360208110156105d157600080fd5b50356001600160a01b0316611b7f565b6101d1600480360360208110156105f757600080fd5b50356001600160a01b0316611bd0565b61020c6004803603606081101561061d57600080fd5b506001600160a01b03813581169160208101359091169060400135611be2565b61020c6004803603602081101561065357600080fd5b5035611d0e565b60075481565b336000908152602081905260409020546001146106b2576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a546001146106f8576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b81631cdc1bdd60e21b1415610721576000838152600260208190526040909120018190556107be565b81636c696e6560e01b14156107495760008381526002602052604090206003018190556107be565b8163191d5cdd60e21b14156107715760008381526002602052604090206004018190556107be565b6040805162461bcd60e51b815260206004820152601b60248201527f5661742f66696c652d756e7265636f676e697a65642d706172616d0000000000604482015290519081900360640190fd5b604080518281529051839185917f851aa1caf4888170ad8875449d18f0f512fd6deb2a6571ea1a41fb9f95acbcd19181900360200190a3505050565b600460209081526000928352604080842090915290825290205481565b60036020908152600092835260408084209091529082529020805460019091015482565b3360009081526020819052604090205460011461088d576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a546001146108d3576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b81634c696e6560e01b141561077157600981905560408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b60085481565b33600090815260208190526040902054600114610979576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600081815260026020526040902060010154156109d4576040805162461bcd60e51b815260206004820152601460248201527315985d0bda5b1acb585b1c9958591e4b5a5b9a5d60621b604482015290519081900360640190fd5b6000818152600260205260408082206b033b2e3c9fd0803ce80000006001909101555182917feeb45f27c5b399a603237b10d4803743d494bfc24c3a004cadb716c41033a55591a250565b600160209081526000928352604080842090915290825290205481565b610a468333611dd3565b610a89576040805162461bcd60e51b815260206004820152600f60248201526e15985d0bdb9bdd0b585b1b1bddd959608a1b604482015290519081900360640190fd5b60008481526004602090815260408083206001600160a01b0387168452909152902054610ab69082611e13565b60008581526004602090815260408083206001600160a01b038881168552925280832093909355841681522054610aed9082611e23565b60008581526004602090815260408083206001600160a01b038088168086529184529382902094909455805185815290519287169288927f5718eae79ffb8b6c98c497e5029a903705cf6a33a17aaab32de7fe198d8d8a0d928290030190a450505050565b33600090815260208190526040902054600114610ba4576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a54600114610bea576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b33600090815260208190526040902054600114610c81576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b6000600a8190556040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda9190a1565b60056020526000908152604090205481565b600a54600114610d09576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b610d11611ef5565b5060008681526003602090815260408083206001600160a01b03891684528252918290208251808401909352805483526001015490820152610d51611f0f565b50600087815260026020818152604092839020835160a081018552815481526001820154928101839052928101549383019390935260038301546060830152600490920154608082015290610de0576040805162461bcd60e51b815260206004820152601060248201526f15985d0bda5b1acb5b9bdd0b5a5b9a5d60821b604482015290519081900360640190fd5b8151610dec9085611e33565b82526020820151610dfd9084611e33565b60208301528051610e0e9084611e33565b81526020810151600090610e229085611e68565b90506000610e3883602001518560200151611e96565b9050610e4660075483611e33565b600781905550610e826000861315610e7d8560600151610e6e87600001518860200151611e96565b11156009546007541115611eb9565b611ebd565b610eca576040805162461bcd60e51b815260206004820152601460248201527315985d0bd8d95a5b1a5b99cb595e18d95959195960621b604482015290519081900360640190fd5b610ef9610edf60008713156000891215611eb9565b610ef186600001518660400151611e96565b831115611ebd565b610f39576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d7361666560a01b604482015290519081900360640190fd5b610f58610f4e60008713156000891215611eb9565b610e7d8b33611dd3565b610f9d576040805162461bcd60e51b81526020600482015260116024820152705661742f6e6f742d616c6c6f7765642d7560781b604482015290519081900360640190fd5b610faf6000871315610e7d8a33611dd3565b610ff4576040805162461bcd60e51b81526020600482015260116024820152702b30ba17b737ba16b0b63637bbb2b216bb60791b604482015290519081900360640190fd5b6110066000861215610e7d8933611dd3565b61104b576040805162461bcd60e51b81526020600482015260116024820152705661742f6e6f742d616c6c6f7765642d7760781b604482015290519081900360640190fd5b61106384602001516000148460800151831015611ebd565b61109f576040805162461bcd60e51b815260206004820152600860248201526715985d0bd91d5cdd60c21b604482015290519081900360640190fd5b60008a81526004602090815260408083206001600160a01b038c1684529091529020546110cc9087611ec1565b60008b81526004602090815260408083206001600160a01b03808e16855290835281842094909455928a1682526005905220546111099083611e33565b60056000896001600160a01b03166001600160a01b031681526020019081526020016000208190555083600360008c815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c81526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050886001600160a01b03168a7fe37707842c8387f7c3c357f1d6c5bf57084e681573bdda024fae70cf0ecde80e8a8a8a8a60405180856001600160a01b03168152602001846001600160a01b0316815260200183815260200182815260200194505050505060405180910390a350505050505050505050565b33600090815260208190526040902054600114611293576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b60008681526003602090815260408083206001600160a01b03891684528252808320898452600290925290912081546112cc9085611e33565b825560018201546112dd9084611e33565b600183015580546112ee9084611e33565b815560018101546000906113029085611e68565b60008a81526004602090815260408083206001600160a01b038c1684529091529020549091506113329086611ec1565b60008a81526004602090815260408083206001600160a01b03808d16855290835281842094909455928916825260069052205461136f9082611ec1565b6001600160a01b0387166000908152600660205260409020556008546113959082611ec1565b600855604080516001600160a01b0389811682528881166020830152818301889052606082018790529151918a16918b917f1b2837fd40844c96cf39e52acaae7902fb74257fe20b1b7df5458b97d896c636919081900360800190a3505050505050505050565b3360009081526020819052604090205460011461144e576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b60008381526004602090815260408083206001600160a01b038616845290915290205461147b9082611e33565b60008481526004602090815260408083206001600160a01b038716808552908352928190209390935582518481529251919286927f0d5f62756a04d37a9bb68fd20b97c7c6a03e96ab87385a99f99c2463157dba4e929181900390910190a3505050565b60008581526003602090815260408083206001600160a01b03888116855290835281842090871684528184208985526002909352922082546115219086611ec1565b835560018301546115329085611ec1565b600184015581546115439086611e33565b825560018201546115549085611e33565b8260010181905550600061157084600101548360010154611e96565b9050600061158684600101548460010154611e96565b90506115a46115958a33611dd3565b61159f8a33611dd3565b611eb9565b6115e7576040805162461bcd60e51b815260206004820152600f60248201526e15985d0bdb9bdd0b585b1b1bddd959608a1b604482015290519081900360640190fd5b6115f985600001548460020154611e96565b821115611640576040805162461bcd60e51b815260206004820152601060248201526f5661742f6e6f742d736166652d73726360801b604482015290519081900360640190fd5b61165284600001548460020154611e96565b811115611699576040805162461bcd60e51b815260206004820152601060248201526f15985d0bdb9bdd0b5cd859994b591cdd60821b604482015290519081900360640190fd5b6116b183600401548310158660010154600014611ebd565b6116f1576040805162461bcd60e51b815260206004820152600c60248201526b5661742f647573742d73726360a01b604482015290519081900360640190fd5b61170983600401548210158560010154600014611ebd565b611749576040805162461bcd60e51b815260206004820152600c60248201526b15985d0bd91d5cdd0b591cdd60a21b604482015290519081900360640190fd5b876001600160a01b0316896001600160a01b03168b7f4b67161d2a4293b296b2f023c52ea4214353fa4f03e58973572faa00097dbd1e8a8a604051808381526020018281526020019250505060405180910390a450505050505050505050565b600a5481565b33600090815260208190526040902054600114611801576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a54600114611847576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b3360008181526001602081815260408084206001600160a01b03871680865292528084209290925590519092917faa731fc3330498a56e191236785be109218ed38365faa8c33965e6de3b78ee4c91a350565b33600090815260208190526040902054600114611930576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a54600114611976576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b600083815260026020526040902060018101546119939083611e33565b600182015580546000906119a79084611e68565b6001600160a01b0385166000908152600560205260409020549091506119cd9082611e33565b6001600160a01b0385166000908152600560205260409020556007546119f39082611e33565b6007556040805184815290516001600160a01b0386169187917f8e03d1ac49b6d4e90dd1c4e641ecc5ca76b7c07a487690b6897c0e5e374b19d29181900360200190a35050505050565b60095481565b611a4d8333611dd3565b611a90576040805162461bcd60e51b815260206004820152600f60248201526e15985d0bdb9bdd0b585b1b1bddd959608a1b604482015290519081900360640190fd5b6001600160a01b038316600090815260056020526040902054611ab39082611e13565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611ae29082611e23565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fdeb3a6837278f6e9914a507e4d73f08e841d8fca434fb97d4307b3b0d3d6b10592918290030190a3505050565b60006020819052908152604090205481565b600260208190526000918252604090912080546001820154928201546003830154600490930154919392909185565b3360008181526001602090815260408083206001600160a01b0386168085529252808320839055519092917f181131ad57ffc99f2486240a094384037710b935bcd941b626ca2856316bb2c591a350565b60066020526000908152604090205481565b33600090815260208190526040902054600114611c34576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b6001600160a01b038316600090815260066020526040902054611c579082611e23565b6001600160a01b03808516600090815260066020908152604080832094909455918516815260059091522054611c8d9082611e23565b6001600160a01b038316600090815260056020526040902055600854611cb39082611e23565b600855600754611cc39082611e23565b6007556040805182815290516001600160a01b0380851692908616917f02d16dda43fd89f02e33ce23ecf0251cdc426807cc72ae74d37e8d3681dae7e59181900360200190a3505050565b33600081815260066020526040902054611d289083611e13565b6001600160a01b038216600090815260066020908152604080832093909355600590522054611d579083611e13565b6001600160a01b038216600090815260056020526040902055600854611d7d9083611e13565b600855600754611d8d9083611e13565b6007556040805183815290516001600160a01b038316917ff45656a54542e115023bb56558fa8a669119d7b2cc53bbc6c11b6ffc3b36e965919081900360200190a25050565b6001600160a01b038281166000818152600160208181526040808420958716808552959091528220549193611e0a93149114611ebd565b90505b92915050565b80820382811115611e0d57600080fd5b80820182811015611e0d57600080fd5b818101600082121580611e465750828111155b611e4f57600080fd5b600082131580611e5f5750828110155b611e0d57600080fd5b8181026000831215611e7957600080fd5b811580611e5f575082828281611e8b57fe5b0514611e0d57600080fd5b6000811580611e5f57505080820282828281611eae57fe5b0414611e0d57600080fd5b1690565b1790565b808203600082131580611ed45750828111155b611edd57600080fd5b600082121580611e5f575082811015611e0d57600080fd5b604051806040016040528060008152602001600081525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe5661742f6e6f742d617574686f72697a65640000000000000000000000000000a2646970667358221220a70eb8065b857bb9670c24a3337fa9f9331440b50542dfa161780727bbe833ec64736f6c634300060c0033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80637cdd3fde116100f9578063bb35783b11610097578063dc4d20fa11610071578063dc4d20fa146105bb578063f059212a146105e1578063f24e23eb14610607578063f37ac61c1461063d576101c4565b8063bb35783b14610517578063bf353dbb1461054d578063d9638d3614610573576101c4565b80639c52a7f1116100d35780639c52a7f114610491578063a3b22fc4146104b7578063b65337df146104dd578063babe8a3f1461050f576101c4565b80637cdd3fde14610415578063870c616d14610447578063957aa58c14610489576101c4565b80634538c4eb11610166578063692450091161014057806369245009146103575780636c25b3461461035f57806376088703146103855780637bab3f40146103cd576101c4565b80634538c4eb146102c75780636111be2e146102f557806365fae35e14610331576101c4565b80632424be5c116101a25780632424be5c1461023a57806329ae81141461027f5780632d61a355146102a25780633b663195146102aa576101c4565b80630dca59c1146101c95780631a0b287e146101e3578063214414d51461020e575b600080fd5b6101d161065a565b60408051918252519081900360200190f35b61020c600480360360608110156101f957600080fd5b5080359060208101359060400135610660565b005b6101d16004803603604081101561022457600080fd5b50803590602001356001600160a01b03166107fa565b6102666004803603604081101561025057600080fd5b50803590602001356001600160a01b0316610817565b6040805192835260208301919091528051918290030190f35b61020c6004803603604081101561029557600080fd5b508035906020013561083b565b6101d1610921565b61020c600480360360208110156102c057600080fd5b5035610927565b6101d1600480360360408110156102dd57600080fd5b506001600160a01b0381358116916020013516610a1f565b61020c6004803603608081101561030b57600080fd5b508035906001600160a01b03602082013581169160408101359091169060600135610a3c565b61020c6004803603602081101561034757600080fd5b50356001600160a01b0316610b52565b61020c610c2f565b6101d16004803603602081101561037557600080fd5b50356001600160a01b0316610cb1565b61020c600480360360c081101561039b57600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a00135610cc3565b61020c600480360360c08110156103e357600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a00135611241565b61020c6004803603606081101561042b57600080fd5b508035906001600160a01b0360208201351690604001356113fc565b61020c600480360360a081101561045d57600080fd5b508035906001600160a01b036020820135811691604081013590911690606081013590608001356114df565b6101d16117a9565b61020c600480360360208110156104a757600080fd5b50356001600160a01b03166117af565b61020c600480360360208110156104cd57600080fd5b50356001600160a01b031661188b565b61020c600480360360608110156104f357600080fd5b508035906001600160a01b0360208201351690604001356118de565b6101d1611a3d565b61020c6004803603606081101561052d57600080fd5b506001600160a01b03813581169160208101359091169060400135611a43565b6101d16004803603602081101561056357600080fd5b50356001600160a01b0316611b3e565b6105906004803603602081101561058957600080fd5b5035611b50565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b61020c600480360360208110156105d157600080fd5b50356001600160a01b0316611b7f565b6101d1600480360360208110156105f757600080fd5b50356001600160a01b0316611bd0565b61020c6004803603606081101561061d57600080fd5b506001600160a01b03813581169160208101359091169060400135611be2565b61020c6004803603602081101561065357600080fd5b5035611d0e565b60075481565b336000908152602081905260409020546001146106b2576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a546001146106f8576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b81631cdc1bdd60e21b1415610721576000838152600260208190526040909120018190556107be565b81636c696e6560e01b14156107495760008381526002602052604090206003018190556107be565b8163191d5cdd60e21b14156107715760008381526002602052604090206004018190556107be565b6040805162461bcd60e51b815260206004820152601b60248201527f5661742f66696c652d756e7265636f676e697a65642d706172616d0000000000604482015290519081900360640190fd5b604080518281529051839185917f851aa1caf4888170ad8875449d18f0f512fd6deb2a6571ea1a41fb9f95acbcd19181900360200190a3505050565b600460209081526000928352604080842090915290825290205481565b60036020908152600092835260408084209091529082529020805460019091015482565b3360009081526020819052604090205460011461088d576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a546001146108d3576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b81634c696e6560e01b141561077157600981905560408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b60085481565b33600090815260208190526040902054600114610979576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600081815260026020526040902060010154156109d4576040805162461bcd60e51b815260206004820152601460248201527315985d0bda5b1acb585b1c9958591e4b5a5b9a5d60621b604482015290519081900360640190fd5b6000818152600260205260408082206b033b2e3c9fd0803ce80000006001909101555182917feeb45f27c5b399a603237b10d4803743d494bfc24c3a004cadb716c41033a55591a250565b600160209081526000928352604080842090915290825290205481565b610a468333611dd3565b610a89576040805162461bcd60e51b815260206004820152600f60248201526e15985d0bdb9bdd0b585b1b1bddd959608a1b604482015290519081900360640190fd5b60008481526004602090815260408083206001600160a01b0387168452909152902054610ab69082611e13565b60008581526004602090815260408083206001600160a01b038881168552925280832093909355841681522054610aed9082611e23565b60008581526004602090815260408083206001600160a01b038088168086529184529382902094909455805185815290519287169288927f5718eae79ffb8b6c98c497e5029a903705cf6a33a17aaab32de7fe198d8d8a0d928290030190a450505050565b33600090815260208190526040902054600114610ba4576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a54600114610bea576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b33600090815260208190526040902054600114610c81576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b6000600a8190556040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda9190a1565b60056020526000908152604090205481565b600a54600114610d09576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b610d11611ef5565b5060008681526003602090815260408083206001600160a01b03891684528252918290208251808401909352805483526001015490820152610d51611f0f565b50600087815260026020818152604092839020835160a081018552815481526001820154928101839052928101549383019390935260038301546060830152600490920154608082015290610de0576040805162461bcd60e51b815260206004820152601060248201526f15985d0bda5b1acb5b9bdd0b5a5b9a5d60821b604482015290519081900360640190fd5b8151610dec9085611e33565b82526020820151610dfd9084611e33565b60208301528051610e0e9084611e33565b81526020810151600090610e229085611e68565b90506000610e3883602001518560200151611e96565b9050610e4660075483611e33565b600781905550610e826000861315610e7d8560600151610e6e87600001518860200151611e96565b11156009546007541115611eb9565b611ebd565b610eca576040805162461bcd60e51b815260206004820152601460248201527315985d0bd8d95a5b1a5b99cb595e18d95959195960621b604482015290519081900360640190fd5b610ef9610edf60008713156000891215611eb9565b610ef186600001518660400151611e96565b831115611ebd565b610f39576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d7361666560a01b604482015290519081900360640190fd5b610f58610f4e60008713156000891215611eb9565b610e7d8b33611dd3565b610f9d576040805162461bcd60e51b81526020600482015260116024820152705661742f6e6f742d616c6c6f7765642d7560781b604482015290519081900360640190fd5b610faf6000871315610e7d8a33611dd3565b610ff4576040805162461bcd60e51b81526020600482015260116024820152702b30ba17b737ba16b0b63637bbb2b216bb60791b604482015290519081900360640190fd5b6110066000861215610e7d8933611dd3565b61104b576040805162461bcd60e51b81526020600482015260116024820152705661742f6e6f742d616c6c6f7765642d7760781b604482015290519081900360640190fd5b61106384602001516000148460800151831015611ebd565b61109f576040805162461bcd60e51b815260206004820152600860248201526715985d0bd91d5cdd60c21b604482015290519081900360640190fd5b60008a81526004602090815260408083206001600160a01b038c1684529091529020546110cc9087611ec1565b60008b81526004602090815260408083206001600160a01b03808e16855290835281842094909455928a1682526005905220546111099083611e33565b60056000896001600160a01b03166001600160a01b031681526020019081526020016000208190555083600360008c815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015590505082600260008c81526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050886001600160a01b03168a7fe37707842c8387f7c3c357f1d6c5bf57084e681573bdda024fae70cf0ecde80e8a8a8a8a60405180856001600160a01b03168152602001846001600160a01b0316815260200183815260200182815260200194505050505060405180910390a350505050505050505050565b33600090815260208190526040902054600114611293576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b60008681526003602090815260408083206001600160a01b03891684528252808320898452600290925290912081546112cc9085611e33565b825560018201546112dd9084611e33565b600183015580546112ee9084611e33565b815560018101546000906113029085611e68565b60008a81526004602090815260408083206001600160a01b038c1684529091529020549091506113329086611ec1565b60008a81526004602090815260408083206001600160a01b03808d16855290835281842094909455928916825260069052205461136f9082611ec1565b6001600160a01b0387166000908152600660205260409020556008546113959082611ec1565b600855604080516001600160a01b0389811682528881166020830152818301889052606082018790529151918a16918b917f1b2837fd40844c96cf39e52acaae7902fb74257fe20b1b7df5458b97d896c636919081900360800190a3505050505050505050565b3360009081526020819052604090205460011461144e576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b60008381526004602090815260408083206001600160a01b038616845290915290205461147b9082611e33565b60008481526004602090815260408083206001600160a01b038716808552908352928190209390935582518481529251919286927f0d5f62756a04d37a9bb68fd20b97c7c6a03e96ab87385a99f99c2463157dba4e929181900390910190a3505050565b60008581526003602090815260408083206001600160a01b03888116855290835281842090871684528184208985526002909352922082546115219086611ec1565b835560018301546115329085611ec1565b600184015581546115439086611e33565b825560018201546115549085611e33565b8260010181905550600061157084600101548360010154611e96565b9050600061158684600101548460010154611e96565b90506115a46115958a33611dd3565b61159f8a33611dd3565b611eb9565b6115e7576040805162461bcd60e51b815260206004820152600f60248201526e15985d0bdb9bdd0b585b1b1bddd959608a1b604482015290519081900360640190fd5b6115f985600001548460020154611e96565b821115611640576040805162461bcd60e51b815260206004820152601060248201526f5661742f6e6f742d736166652d73726360801b604482015290519081900360640190fd5b61165284600001548460020154611e96565b811115611699576040805162461bcd60e51b815260206004820152601060248201526f15985d0bdb9bdd0b5cd859994b591cdd60821b604482015290519081900360640190fd5b6116b183600401548310158660010154600014611ebd565b6116f1576040805162461bcd60e51b815260206004820152600c60248201526b5661742f647573742d73726360a01b604482015290519081900360640190fd5b61170983600401548210158560010154600014611ebd565b611749576040805162461bcd60e51b815260206004820152600c60248201526b15985d0bd91d5cdd0b591cdd60a21b604482015290519081900360640190fd5b876001600160a01b0316896001600160a01b03168b7f4b67161d2a4293b296b2f023c52ea4214353fa4f03e58973572faa00097dbd1e8a8a604051808381526020018281526020019250505060405180910390a450505050505050505050565b600a5481565b33600090815260208190526040902054600114611801576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a54600114611847576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b3360008181526001602081815260408084206001600160a01b03871680865292528084209290925590519092917faa731fc3330498a56e191236785be109218ed38365faa8c33965e6de3b78ee4c91a350565b33600090815260208190526040902054600114611930576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b600a54600114611976576040805162461bcd60e51b815260206004820152600c60248201526b5661742f6e6f742d6c69766560a01b604482015290519081900360640190fd5b600083815260026020526040902060018101546119939083611e33565b600182015580546000906119a79084611e68565b6001600160a01b0385166000908152600560205260409020549091506119cd9082611e33565b6001600160a01b0385166000908152600560205260409020556007546119f39082611e33565b6007556040805184815290516001600160a01b0386169187917f8e03d1ac49b6d4e90dd1c4e641ecc5ca76b7c07a487690b6897c0e5e374b19d29181900360200190a35050505050565b60095481565b611a4d8333611dd3565b611a90576040805162461bcd60e51b815260206004820152600f60248201526e15985d0bdb9bdd0b585b1b1bddd959608a1b604482015290519081900360640190fd5b6001600160a01b038316600090815260056020526040902054611ab39082611e13565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611ae29082611e23565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fdeb3a6837278f6e9914a507e4d73f08e841d8fca434fb97d4307b3b0d3d6b10592918290030190a3505050565b60006020819052908152604090205481565b600260208190526000918252604090912080546001820154928201546003830154600490930154919392909185565b3360008181526001602090815260408083206001600160a01b0386168085529252808320839055519092917f181131ad57ffc99f2486240a094384037710b935bcd941b626ca2856316bb2c591a350565b60066020526000908152604090205481565b33600090815260208190526040902054600114611c34576040805162461bcd60e51b81526020600482015260126024820152600080516020611f3f833981519152604482015290519081900360640190fd5b6001600160a01b038316600090815260066020526040902054611c579082611e23565b6001600160a01b03808516600090815260066020908152604080832094909455918516815260059091522054611c8d9082611e23565b6001600160a01b038316600090815260056020526040902055600854611cb39082611e23565b600855600754611cc39082611e23565b6007556040805182815290516001600160a01b0380851692908616917f02d16dda43fd89f02e33ce23ecf0251cdc426807cc72ae74d37e8d3681dae7e59181900360200190a3505050565b33600081815260066020526040902054611d289083611e13565b6001600160a01b038216600090815260066020908152604080832093909355600590522054611d579083611e13565b6001600160a01b038216600090815260056020526040902055600854611d7d9083611e13565b600855600754611d8d9083611e13565b6007556040805183815290516001600160a01b038316917ff45656a54542e115023bb56558fa8a669119d7b2cc53bbc6c11b6ffc3b36e965919081900360200190a25050565b6001600160a01b038281166000818152600160208181526040808420958716808552959091528220549193611e0a93149114611ebd565b90505b92915050565b80820382811115611e0d57600080fd5b80820182811015611e0d57600080fd5b818101600082121580611e465750828111155b611e4f57600080fd5b600082131580611e5f5750828110155b611e0d57600080fd5b8181026000831215611e7957600080fd5b811580611e5f575082828281611e8b57fe5b0514611e0d57600080fd5b6000811580611e5f57505080820282828281611eae57fe5b0414611e0d57600080fd5b1690565b1790565b808203600082131580611ed45750828111155b611edd57600080fd5b600082121580611e5f575082811015611e0d57600080fd5b604051806040016040528060008152602001600081525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe5661742f6e6f742d617574686f72697a65640000000000000000000000000000a2646970667358221220a70eb8065b857bb9670c24a3337fa9f9331440b50542dfa161780727bbe833ec64736f6c634300060c0033