0x610100604052348015610010575f5ffd5b506040516129ee3803806129ee83398101604081905261002f91610068565b601f6080526001600160a01b0392831660a05290821660c0521660e0526100b2565b6001600160a01b0381168114610065575f5ffd5b50565b5f5f5f6060848603121561007a575f5ffd5b835161008581610051565b602085015190935061009681610051565b60408501519092506100a781610051565b809150509250925092565b60805160a05160c05160e05161286161018d5f395f818161020a015281816105dc01528181610ecd015261121501525f81816101180152818161013f0152818161043201528181610f7f015281816110a1015281816112dd0152818161132d015281816114a1015281816114f10152818161162b015261172501525f81816102550152818161049201528181610541015281816106800152818161075e015281816108750152818161097901528181610a6d01528181610c1701528181610cfe0152610db901525f81816103ae01526104d901526128615ff3fe608060405260043610610108575f3560e01c80639e687b6c11610092578063c6bc518211610062578063c6bc5182146103e2578063d03283dd14610402578063e1758bd814610421578063f336a54a14610454578063f75d217f14610473575f5ffd5b80639e687b6c14610340578063a4cc72a11461035f578063a5cb89981461037e578063aa5823281461039d575f5ffd5b806328f3b1cc116100d857806328f3b1cc146102a557806329da8e98146102c4578063346404a3146102e357806347fa348a1461030257806368284a9c14610321575f5ffd5b806301ffc9a7146101b457806304f3bcec146101f95780630a2959751461024457806311b7b57314610277575f5ffd5b366101b057336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101ae577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610196575f5ffd5b505af11580156101a8573d5f5f3e3d5ffd5b50505050505b005b5f5ffd5b3480156101bf575f5ffd5b506101e46101ce366004611d80565b6001600160e01b031916635e05eaff60e11b1490565b60405190151581526020015b60405180910390f35b348015610204575f5ffd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101f0565b34801561024f575f5ffd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610282575f5ffd5b506102975f5160206128415f395f51905f5281565b6040519081526020016101f0565b3480156102b0575f5ffd5b506101ae6102bf366004611dbe565b610487565b3480156102cf575f5ffd5b506101ae6102de366004611dfd565b610536565b3480156102ee575f5ffd5b506102976102fd366004611e4d565b6105c5565b34801561030d575f5ffd5b5061022c61031c366004611e7b565b6105d9565b34801561032c575f5ffd5b5061029761033b366004611e92565b610674565b34801561034b575f5ffd5b5061029761035a366004611e4d565b610751565b34801561036a575f5ffd5b50610297610379366004611ece565b610c0b565b348015610389575f5ffd5b50610297610398366004611e4d565b610ce7565b3480156103a8575f5ffd5b506103d07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101f0565b3480156103ed575f5ffd5b505f5160206128415f395f51905f5254610297565b34801561040d575f5ffd5b5061029761041c366004611ece565b610cf2565b34801561042c575f5ffd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561045f575f5ffd5b5061029761046e366004611e92565b610dad565b34801561047e575f5ffd5b506101e4600181565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104d75760405163570870ef60e11b81523360048201526024015b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060ff166105058460781c90565b60ff161461052657604051633a0439f360e11b815260040160405180910390fd5b610531838383610e68565b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105815760405163570870ef60e11b81523360048201526024016104ce565b6040516001600160a01b038216815284907fbfa100eea2f40b39537bc6df4de7f953b016b20340469136d16c33725f92e8a39060200160405180910390a250505050565b5f6105d08383610ec9565b90505b92915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6bd26a26106138460a81b90565b6040516001600160e01b031960e084901b16815260d89190911c6004820152602401602060405180830381865afa158015610650573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d39190611f03565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106c05760405163570870ef60e11b81523360048201526024016104ce565b825f036106ce57505f610749565b5f6106d98686610ec9565b9050805f036106eb575f915050610749565b6106f88686868685610f7b565b9150846001600160a01b0316867fad382ae4a0a8c252d70b902c9cc346f3e881ad505df3f728122a01006bb88f09848460405161073f929190918252602082015260400190565b60405180910390a3505b949350505050565b5f306001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d24415b26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190611f03565b6001600160a01b0316633dce36f2856040518263ffffffff1660e01b815260040161080991815260200190565b602060405180830381865afa158015610824573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108489190611f03565b6001600160a01b0316146108725760405163222a979560e11b8152600481018490526024016104ce565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323228ecb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f39190611f03565b604051630e29a66960e21b8152600481018690529091505f906001600160a01b038316906338a699a490602401602060405180830381865afa15801561093b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095f9190611f32565b6109ef5760405163586ca86560e11b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b0d950ca90602401602060405180830381865afa1580156109c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ea9190611f03565b610a56565b60405163100ca19960e21b8152600481018690526001600160a01b03831690634032866490602401602060405180830381865afa158015610a32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190611f03565b90506001600160a01b03841615801590610b5757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aeb9190611f03565b6040516375151b6360e01b81526001600160a01b03868116600483015291909116906375151b6390602401602060405180830381865afa158015610b31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b559190611f32565b155b15610b8057604051636ebdc1c760e11b81526001600160a01b03851660048201526024016104ce565b6001600160a01b038416610ba957479250610ba46001600160a01b038216846110d7565b610bbf565b610bbc6001600160a01b038516826111ec565b92505b836001600160a01b0316857fe10480fa0f8f1c0d4fc65799762c7be48848d8aeb9465f2b98dcd30bd6b784c685604051610bfb91815260200190565b60405180910390a3505092915050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c575760405163570870ef60e11b81523360048201526024016104ce565b815f03610c6557505f610ce0565b5f610c708585611211565b9050805f03610c82575f915050610ce0565b610c8f85858533856112c3565b9150836001600160a01b0316857f01e7ee7e76483485fd1d9e5b1c6a72af05e18dac7fc43f767d6897ef153bef868484604051610cd6929190918252602082015260400190565b60405180910390a3505b9392505050565b5f6105d08383611211565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d3e5760405163570870ef60e11b81523360048201526024016104ce565b815f03610d4c57505f610ce0565b5f610d578585610ec9565b9050610d668585853385611487565b9150836001600160a01b0316857fecb90afec3ccd66fd52ddbabd04ded0ffe45c0ce0496fd7859f4af4ca2d41a408484604051610cd6929190918252602082015260400190565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610df95760405163570870ef60e11b81523360048201526024016104ce565b825f03610e0757505f610749565b5f610e128686611211565b9050610e218686868685611627565b9150846001600160a01b0316867f089164adf1db4f670220caf2545a52c89761c59b497d19a31ead78652d6789f9848460405161073f929190918252602082015260400190565b610e718361174d565b610e8d5760405162d36c8560e81b815260040160405180910390fd5b5f610e97846105d9565b9050610eae6001600160a01b038416825f1961176a565b610ec36001600160a01b038316825f1961176a565b50505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663144128e8610f0f5f5160206128415f395f51905f525490565b6040518263ffffffff1660e01b8152600401610f2d91815260200190565b610c4060405180830381865afa158015610f49573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6d9190612680565b506101200151949350505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161490505f838614610fd357610fc58661182b565b610fce90612762565b610fd9565b600160ff1b5b90505f610fe5896105d9565b6001600160a01b031663032d22766110085f5160206128415f395f51905f525490565b845f87611015578a611017565b305b6040518563ffffffff1660e01b8152600401611036949392919061277c565b6060604051808303815f875af1158015611052573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107691906127a0565b5091505061108c8161108790612762565b611898565b935082156110cb576110c96001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163088876118e9565b505b50505095945050505050565b804710156111275760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016104ce565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611170576040519150601f19603f3d011682016040523d82523d5f602084013e611175565b606091505b50509050806105315760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016104ce565b5f6111f683611977565b905080156105d35761120a833084846118e9565b5092915050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663144128e86112575f5160206128415f395f51905f525490565b6040518263ffffffff1660e01b815260040161127591815260200190565b610c4060405180830381865afa158015611291573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b59190612680565b506101400151949350505050565b5f6112d96001600160a01b0386168430876118e9565b505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03160361138d5750604051632e1a7d4d60e01b81526004810185905284907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015611376575f5ffd5b505af1158015611388573d5f5f3e3d5ffd5b505050505b5f611397886105d9565b6001600160a01b031663032d2276836113bb5f5160206128415f395f51905f525490565b5f888b106113cd57600160ff1b6113df565b6113d68b61182b565b6113df90612762565b5f6040518663ffffffff1660e01b81526004016113ff949392919061277c565b60606040518083038185885af115801561141b573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061144091906127a0565b925050506114518161108790612762565b92508583101561147c576110cb308661146a868a6127cb565b6001600160a01b038b169291906118e9565b505095945050505050565b5f61149d6001600160a01b0386168430876118e9565b505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316036115515750604051632e1a7d4d60e01b81526004810185905284907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b15801561153a575f5ffd5b505af115801561154c573d5f5f3e3d5ffd5b505050505b5f6115675f5160206128415f395f51905f525490565b90505f5f6115748a6105d9565b6001600160a01b031663032d2276858561158d8c61182b565b5f5f6040518663ffffffff1660e01b81526004016115ae949392919061277c565b60606040518083038185885af11580156115ca573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115ef91906127a0565b5091509150825f0361161057611610825f5160206128415f395f51905f5255565b61161981611898565b9a9950505050505050505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161490505f61166a886105d9565b6001600160a01b031663032d227661168d5f5160206128415f395f51905f525490565b5f6116978a61182b565b866116a257896116a4565b305b6040518563ffffffff1660e01b81526004016116c3949392919061277c565b6060604051808303815f875af11580156116df573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170391906127a0565b9250505061171081611898565b9250811561147c576110cb6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163087866118e9565b5f63ffffffff61175d8360581c90565b63ffffffff161492915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526117bb84826119df565b610ec3576040516001600160a01b03841660248201525f604482015261182190859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a7c565b610ec38482611a7c565b5f6001600160ff1b038211156118945760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016104ce565b5090565b5f5f8212156118945760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f73697469766560448201526064016104ce565b5f6001600160a01b0384166119115760405163a26bef6960e01b815260040160405180910390fd5b6001600160a01b03831661193857604051637d0f1ea160e01b815260040160405180910390fd5b826001600160a01b0316846001600160a01b03161480611956575081155b15611962575080610749565b61196e85858585611b4f565b95945050505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156119bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d391906127de565b5f5f5f846001600160a01b0316846040516119fa91906127f5565b5f604051808303815f865af19150503d805f8114611a33576040519150601f19603f3d011682016040523d82523d5f602084013e611a38565b606091505b5091509150818015611a62575080511580611a62575080806020019051810190611a629190611f32565b801561196e5750505050506001600160a01b03163b151590565b5f611ad0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b969092919063ffffffff16565b905080515f1480611af0575080806020019051810190611af09190611f32565b6105315760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104ce565b5f6001600160a01b0384163014611b7a57611b756001600160a01b038616858585611ba4565b611b8e565b611b8e6001600160a01b0386168484611bdc565b509392505050565b606061074984845f85611c0c565b6040516001600160a01b0380851660248301528316604482015260648101829052610ec39085906323b872dd60e01b906084016117ea565b6040516001600160a01b03831660248201526044810182905261053190849063a9059cbb60e01b906064016117ea565b606082471015611c6d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104ce565b5f5f866001600160a01b03168587604051611c8891906127f5565b5f6040518083038185875af1925050503d805f8114611cc2576040519150601f19603f3d011682016040523d82523d5f602084013e611cc7565b606091505b5091509150611cd887838387611ce3565b979650505050505050565b60608315611d515782515f03611d4a576001600160a01b0385163b611d4a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104ce565b5081610749565b6107498383815115611d665781518083602001fd5b8060405162461bcd60e51b81526004016104ce919061280b565b5f60208284031215611d90575f5ffd5b81356001600160e01b031981168114610ce0575f5ffd5b6001600160a01b0381168114611dbb575f5ffd5b50565b5f5f5f60608486031215611dd0575f5ffd5b833592506020840135611de281611da7565b91506040840135611df281611da7565b809150509250925092565b5f5f5f5f60808587031215611e10575f5ffd5b843593506020850135611e2281611da7565b92506040850135611e3281611da7565b91506060850135611e4281611da7565b939692955090935050565b5f5f60408385031215611e5e575f5ffd5b823591506020830135611e7081611da7565b809150509250929050565b5f60208284031215611e8b575f5ffd5b5035919050565b5f5f5f5f60808587031215611ea5575f5ffd5b843593506020850135611eb781611da7565b9250604085013591506060850135611e4281611da7565b5f5f5f60608486031215611ee0575f5ffd5b833592506020840135611ef281611da7565b929592945050506040919091013590565b5f60208284031215611f13575f5ffd5b8151610ce081611da7565b80518015158114611f2d575f5ffd5b919050565b5f60208284031215611f42575f5ffd5b6105d082611f1e565b8051611f2d81611da7565b6040516101a0810167ffffffffffffffff81118282101715611f8657634e487b7160e01b5f52604160045260245ffd5b60405290565b604051610180810167ffffffffffffffff81118282101715611f8657634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff81118282101715611f8657634e487b7160e01b5f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611f8657634e487b7160e01b5f52604160045260245ffd5b604051610120810167ffffffffffffffff81118282101715611f8657634e487b7160e01b5f52604160045260245ffd5b604051610160810167ffffffffffffffff81118282101715611f8657634e487b7160e01b5f52604160045260245ffd5b805160ff81168114611f2d575f5ffd5b5f6101a0828403121561209c575f5ffd5b6120a4611f56565b90506120af82611f4b565b81526120bd60208301611f4b565b60208201526120ce60408301611f4b565b60408201526120df60608301611f4b565b60608201526120f060808301611f4b565b608082015261210160a08301611f4b565b60a082015261211260c0830161207b565b60c082015261212360e0830161207b565b60e082015261010082810151908201526101208083015190820152610140808301519082015261016080830151908201526101809182015191810191909152919050565b805161ffff81168114611f2d575f5ffd5b5f6101808284031215612189575f5ffd5b612191611f8c565b905061219c82612167565b81526121aa60208301612167565b60208201526121bb60408301612167565b60408201526121cc60608301612167565b60608201526121dd60808301612167565b60808201526121ee60a08301612167565b60a08201526121ff60c08301612167565b60c082015261221060e08301612167565b60e08201526122226101008301611f4b565b6101008201526101208281015190820152610140808301519082015261224b6101608301611f4b565b61016082015292915050565b5f6101a08284031215612268575f5ffd5b612270611f56565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b5f60c0828403121561230a575f5ffd5b60405160c0810167ffffffffffffffff8111828210171561233957634e487b7160e01b5f52604160045260245ffd5b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f610100828403121561238c575f5ffd5b612394611fbc565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b5f8183036101a08112156123f9575f5ffd5b612401611fec565b835181526020808501519082015260408085015190820152606080850151908201526080808501519082015260a08085015190820152915060e060bf198201121561244a575f5ffd5b50612453611fec565b60c083810151825260e0840151602083015261010084015160408301526101208401516060830152610140840151608083015261016084015160a0830152610180909301518184015291810191909152919050565b5f61012082840312156124b9575f5ffd5b6124c161201b565b90506124cc82611f1e565b81526020828101519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e080830151908201526101009182015191810191909152919050565b5f6101608284031215612538575f5ffd5b61254061204b565b905061254b82611f1e565b81526020828101519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101409182015191810191909152919050565b5f610ac082840312156125cd575f5ffd5b6125d561201b565b90506125e082611f4b565b81526125ef836020840161208b565b6020820152612602836101c08401612178565b6040820152612615836103408401612257565b6060820152612628836104e084016122fa565b608082015261263b836105a0840161237b565b60a082015261264e836106a084016123e7565b60c08201526126618361084084016124a8565b60e0820152612674836109608401612527565b61010082015292915050565b5f5f828403610c40811215612693575f5ffd5b6101808112156126a1575f5ffd5b506126aa611f8c565b835181526126ba60208501611f4b565b60208201526126cb60408501611f1e565b60408201526126dc60608501611f1e565b60608201526080848101519082015260a0808501519082015260c0808501519082015260e08085015190820152610100808501519082015261012080850151908201526101408085015190820152610160808501519082015291506127458461018085016125bc565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b82016127765761277661274e565b505f0390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b5f5f5f606084860312156127b2575f5ffd5b5050815160208301516040909301519094929350919050565b818103818111156105d3576105d361274e565b5f602082840312156127ee575f5ffd5b5051919050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fedf825e2eee9b16bb84c188e881cd60254385acf4b8216f44ae131b434928b37d0000000000000000000000006cae28b3d09d8f8fc74ccd496ac986fc84c0c24e00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab100000000000000000000000077648d39be25a1422467060e11e5b979463bea3d