0x6080604052348015600f57600080fd5b50600080546001600160a01b03191633179055613a67806100316000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100d05780639a7bff79146100fb578063a51692cb1461010e578063fa461e331461012e57600080fd5b806310d1e85c146100825780631401bbed14610097578063796b6762146100aa575b600080fd5b610095610090366004612e90565b610141565b005b6100956100a5366004612efa565b610393565b6100bd6100b8366004612f17565b61062d565b6040519081526020015b60405180910390f35b6000546100e3906001600160a01b031681565b6040516001600160a01b0390911681526020016100c7565b610095610109366004612e90565b610914565b61012161011c366004612ff6565b610ac7565b6040516100c79190613292565b61009561013c3660046132de565b610faf565b600080808061015285870187613331565b9350935093509350806001600160a01b0316336001600160a01b0316146101c05760405162461bcd60e51b815260206004820152601560248201527f556e617574686f72697a65642063616c6c6261636b000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03891630146102185760405162461bcd60e51b815260206004820152601360248201527f556e617574686f72697a65642073656e6465720000000000000000000000000060448201526064016101b7565b6000826102255788610227565b875b6040517f796b676200000000000000000000000000000000000000000000000000000000815260048101829052909150600090309063796b6762906024016020604051808303816000875af1158015610284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a89190613384565b90508481116102f95760405162461bcd60e51b815260206004820152600e60248201527f4e6f2070726f666974206d61646500000000000000000000000000000000000060448201526064016101b7565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820187905287169063a9059cbb906044016020604051808303816000875af1158015610361573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610385919061339d565b505050505050505050505050565b6000546001600160a01b031633146103ed5760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e657200000000000000000060448201526064016101b7565b6001600160a01b038116156105af576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561045e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104829190613384565b9050600081116104d45760405162461bcd60e51b815260206004820152601b60248201527f4e6f20455243323020746f6b656e7320746f207769746864726177000000000060448201526064016101b7565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561053a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055e919061339d565b6105aa5760405162461bcd60e51b815260206004820152601560248201527f4552433230207472616e73666572206661696c6564000000000000000000000060448201526064016101b7565b505050565b47806105fd5760405162461bcd60e51b815260206004820152601260248201527f4e6f2045544820746f207769746864726177000000000000000000000000000060448201526064016101b7565b604051339082156108fc029083906000818181858888f193505050501580156105aa573d6000803e3d6000fd5b50565b60008060075460ff166003811115610647576106476131c5565b0361066f57600154600354610669916001600160a01b039081169116846111b2565b92915050565b600160075460ff166003811115610688576106886131c5565b036107375760015460035460088054610669936001600160a01b0390811693169186916106b4906133ba565b80601f01602080910402602001604051908101604052809291908181526020018280546106e0906133ba565b801561072d5780601f106107025761010080835404028352916020019161072d565b820191906000526020600020905b81548152906001019060200180831161071057829003601f168201915b505050505061139f565b600260075460ff166003811115610750576107506131c5565b036107ff5760015460035460088054610669936001600160a01b03908116931691869161077c906133ba565b80601f01602080910402602001604051908101604052809291908181526020018280546107a8906133ba565b80156107f55780601f106107ca576101008083540402835291602001916107f5565b820191906000526020600020905b8154815290600101906020018083116107d857829003601f168201915b505050505061156c565b600360075460ff166003811115610818576108186131c5565b036108c75760015460035460088054610669936001600160a01b039081169316918691610844906133ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610870906133ba565b80156108bd5780601f10610892576101008083540402835291602001916108bd565b820191906000526020600020905b8154815290600101906020018083116108a057829003601f168201915b50505050506115a0565b60405162461bcd60e51b815260206004820152601460248201527f556e737570706f7274656420706c6174666f726d00000000000000000000000060448201526064016101b7565b919050565b600080808061092585870187613331565b9350935093509350806001600160a01b0316336001600160a01b03161461098e5760405162461bcd60e51b815260206004820152601560248201527f556e617574686f72697a65642063616c6c6261636b000000000000000000000060448201526064016101b7565b6001600160a01b03891630146109e65760405162461bcd60e51b815260206004820152601360248201527f556e617574686f72697a65642073656e6465720000000000000000000000000060448201526064016101b7565b6000826109f357886109f5565b875b6040517f796b676200000000000000000000000000000000000000000000000000000000815260048101829052909150600090309063796b6762906024016020604051808303816000875af1158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190613384565b90508481116102f95760405162461bcd60e51b815260206004820152600e60248201527f6e6f2070726f666974206d61646500000000000000000000000000000000000060448201526064016101b7565b610acf612d92565b6000546001600160a01b03163314610b295760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e657200000000000000000060448201526064016101b7565b600180546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600288905560038054928816929091169190911790558215610ce1578351600214610bf35760405162461bcd60e51b815260206004820152602860248201527f506f6f6c73206172726179206d75737420686176652065786163746c7920322060448201527f656c656d656e747300000000000000000000000000000000000000000000000060648201526084016101b7565b60405180606001604052806000815260200185600081518110610c1857610c1861340d565b6020026020010151815260200185600181518110610c3857610c3861340d565b6020908102919091018101519091528151600490815590820151805160058054909190829060ff19166001836003811115610c7557610c756131c5565b021790555060208201516001820190610c8e908261348a565b5050506040820151805160038084018054909291839160ff1916906001908490811115610cbd57610cbd6131c5565b021790555060208201516001820190610cd6908261348a565b505050905050610cea565b610cea846116eb565b6040805160608101825260048054825282518084019093526005805460009460208501929091829060ff166003811115610d2657610d266131c5565b6003811115610d3757610d376131c5565b8152602001600182018054610d4b906133ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610d77906133ba565b8015610dc45780601f10610d9957610100808354040283529160200191610dc4565b820191906000526020600020905b815481529060010190602001808311610da757829003601f168201915b5050505050815250508152602001600382016040518060400160405290816000820160009054906101000a900460ff166003811115610e0557610e056131c5565b6003811115610e1657610e166131c5565b8152602001600182018054610e2a906133ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e56906133ba565b8015610ea35780601f10610e7857610100808354040283529160200191610ea3565b820191906000526020600020905b815481529060010190602001808311610e8657829003601f168201915b5050505050815250508152505090508380610ebf575080516000125b15610eda57610ecc611dcb565b610ed588610393565b610f28565b8215610f285760405162461bcd60e51b815260206004820152601e60248201527f4e6f20617262697472616765206f70706f7274756e69747920666f756e64000060448201526064016101b7565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600060028190556003805490921690915560048181556005805460ff19168155829081610f80600682612de4565b505060038201805460ff191681556000610f9d6004850182612de4565b50949c9b505050505050505050505050565b6000808080610fc085870187613331565b9350935093509350806001600160a01b0316336001600160a01b0316146110295760405162461bcd60e51b815260206004820152601560248201527f556e617574686f72697a65642063616c6c6261636b000000000000000000000060448201526064016101b7565b60008261103e57611039896135b4565b611047565b611047886135b4565b6040517f796b676200000000000000000000000000000000000000000000000000000000815260048101829052909150600090309063796b6762906024016020604051808303816000875af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c89190613384565b90508481116111195760405162461bcd60e51b815260206004820152600e60248201527f6e6f2070726f666974206d61646500000000000000000000000000000000000060448201526064016101b7565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820187905287169063a9059cbb906044016020604051808303816000875af1158015611181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a5919061339d565b5050505050505050505050565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000008152734752ba5dbc23f44d87826276bf6fd6b1c372ad246004820152602481018290526000906001600160a01b0384169063095ea7b3906044016020604051808303816000875af115801561122f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611253919061339d565b5060408051600280825260608201835260009260208301908036833701905050905083816000815181106112895761128961340d565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001815181106112bd576112bd61340d565b6001600160a01b03909216602092830291909101909101526040517f38ed1739000000000000000000000000000000000000000000000000000000008152600090734752ba5dbc23f44d87826276bf6fd6b1c372ad24906338ed17399061133090879085908790309042906004016135ec565b6000604051808303816000875af115801561134f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611377919081019061365e565b90508060018151811061138c5761138c61340d565b6020026020010151925050509392505050565b6000806113ab8361206c565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000008152732626664c2603336e57b271c5c0b26f421741e4816004820152602481018690529091506001600160a01b0386169063095ea7b3906044016020604051808303816000875af1158015611428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144c919061339d565b506040805160e0810182526001600160a01b0387811682528881166020830190815262ffffff8581168486019081523060608601908152608086018b8152600060a0880181815260c0890182815299517f04e45aaf000000000000000000000000000000000000000000000000000000008152895189166004820152965188166024880152935190941660448601529051851660648501525160848401525160a4830152935190911660c4820152909190732626664c2603336e57b271c5c0b26f421741e481906304e45aaf9060e4015b6020604051808303816000875af115801561153c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115609190613384565b98975050505050505050565b6000806115788361206c565b90506115968587868460405180602001604052806000815250612082565b9695505050505050565b6000806115ac836122b5565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273be6d8f0d05cc4be24d5167a3ef062215be6d18a56004820152602481018690529091506001600160a01b0386169063095ea7b3906044016020604051808303816000875af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164d919061339d565b5060408051610100810182526001600160a01b03808816825288166020820152600283900b8183015230606082015242608082015260a08101869052600060c0820181905260e0820181905291517fa026383e00000000000000000000000000000000000000000000000000000000815290919073be6d8f0d05cc4be24d5167a3ef062215be6d18a59063a026383e9061151d9085906004016136ea565b6000600182516116fb919061377a565b8251611707919061378d565b67ffffffffffffffff81111561171f5761171f612f30565b60405190808252806020026020018201604052801561177257816020015b6040805160808101825260009181018281526060808301528152602081019190915281526020019060019003908161173d5790505b509050600060018351611785919061377a565b8351611791919061378d565b67ffffffffffffffff8111156117a9576117a9612f30565b6040519080825280602002602001820160405280156117fc57816020015b604080516080810182526000918101828152606080830152815260208101919091528152602001906001900390816117c75790505b50905060008060008060005b8751811015611ce55760005b8851811015611cdc57818114611cd4576000808a84815181106118395761183961340d565b6020026020010151600001516003811115611856576118566131c5565b036118825760015460035460025461187b926001600160a01b039081169216906122cb565b90506119e7565b60018a84815181106118965761189661340d565b60200260200101516000015160038111156118b3576118b36131c5565b036118f9576001546003546002548c5161187b936001600160a01b03908116931691908e90889081106118e8576118e861340d565b6020026020010151602001516123cb565b60028a848151811061190d5761190d61340d565b602002602001015160000151600381111561192a5761192a6131c5565b03611970576001546003546002548c5161187b936001600160a01b03908116931691908e908890811061195f5761195f61340d565b6020026020010151602001516124d8565b60038a84815181106119845761198461340d565b60200260200101516000015160038111156119a1576119a16131c5565b036108c7576001546003546002548c5161187b936001600160a01b03908116931691908e90889081106119d6576119d661340d565b60200260200101516020015161257d565b60405180604001604052808b8581518110611a0457611a0461340d565b6020026020010151815260200182815250898881518110611a2757611a2761340d565b602090810291909101015260008a8381518110611a4657611a4661340d565b6020026020010151600001516003811115611a6357611a636131c5565b03611aac576003546001548a51611aa5926001600160a01b039081169216908c908b908110611a9457611a9461340d565b6020026020010151602001516122cb565b9050611c2c565b60018a8381518110611ac057611ac061340d565b6020026020010151600001516003811115611add57611add6131c5565b03611b2c576003546001548a51611aa5926001600160a01b039081169216908c908b908110611b0e57611b0e61340d565b6020026020010151602001518d86815181106118e8576118e861340d565b60028a8381518110611b4057611b4061340d565b6020026020010151600001516003811115611b5d57611b5d6131c5565b03611bac576003546001548a51611aa5926001600160a01b039081169216908c908b908110611b8e57611b8e61340d565b6020026020010151602001518d868151811061195f5761195f61340d565b60038a8381518110611bc057611bc061340d565b6020026020010151600001516003811115611bdd57611bdd6131c5565b036108c7576003546001548a51611aa5926001600160a01b039081169216908c908b908110611c0e57611c0e61340d565b6020026020010151602001518d86815181106119d6576119d661340d565b60405180604001604052808b8481518110611c4957611c4961340d565b6020026020010151815260200182815250888881518110611c6c57611c6c61340d565b602002602001018190525060006001800154898981518110611c9057611c9061340d565b602002602001015160200151611ca691906137a4565b9050861580611cb457508481135b15611cc457809450879550600196505b87611cce816137c4565b98505050505b600101611814565b50600101611808565b506040518060600160405280828152602001878481518110611d0957611d0961340d565b6020026020010151600001518152602001868481518110611d2c57611d2c61340d565b602090810291909101810151519091528151600490815590820151805160058054909190829060ff19166001836003811115611d6a57611d6a6131c5565b021790555060208201516001820190611d83908261348a565b5050506040820151805160038084018054909291839160ff1916906001908490811115611db257611db26131c5565b021790555060208201516001820190610385908261348a565b600060055460ff166003811115611de457611de46131c5565b03611e0b57600154600354600254611e09926001600160a01b0390811692169061263b565b565b600160055460ff166003811115611e2457611e246131c5565b03611ed65760015460035460025460068054611e09946001600160a01b039081169416929190611e53906133ba565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7f906133ba565b8015611ecc5780601f10611ea157610100808354040283529160200191611ecc565b820191906000526020600020905b815481529060010190602001808311611eaf57829003601f168201915b50505050506127b9565b600260055460ff166003811115611eef57611eef6131c5565b03611fa15760015460035460025460068054611e09946001600160a01b039081169416929190611f1e906133ba565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4a906133ba565b8015611f975780601f10611f6c57610100808354040283529160200191611f97565b820191906000526020600020905b815481529060010190602001808311611f7a57829003601f168201915b5050505050612908565b600360055460ff166003811115611fba57611fba6131c5565b036108c75760015460035460025460068054611e09946001600160a01b039081169416929190611fe9906133ba565b80601f0160208091040260200160405190810160405280929190818152602001828054612015906133ba565b80156120625780601f1061203757610100808354040283529160200191612062565b820191906000526020600020905b81548152906001019060200180831161204557829003601f168201915b50505050506129f9565b60008180602001905181019061066991906137fc565b600080612090878786612a28565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f69190613821565b6040517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018890526001600160a01b038a811660248301819052929350808416909214916000919085169063f140a35a90604401602060405180830381865afa15801561216c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121909190613384565b90508551600003612229576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018a90528b169063a9059cbb906044016020604051808303816000875af1158015612203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612227919061339d565b505b836001600160a01b031663022c0d9f836122435782612246565b60005b84612252576000612254565b835b308a6040518563ffffffff1660e01b8152600401612275949392919061383e565b600060405180830381600087803b15801561228f57600080fd5b505af11580156122a3573d6000803e3d6000fd5b50929c9b505050505050505050505050565b600081806020019051810190610669919061386c565b6000806122d88585612adc565b90506000819050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612320573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234491906138c1565b5090925090506001600160a01b038088169089161080156123915761238a87846dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff16612b83565b95506123bf565b6123bc87836dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff16612b83565b95505b50505050509392505050565b6000806123d78361206c565b6040805160a0810182526001600160a01b0389811682528881166020830190815282840189815262ffffff8681166060860190815260006080870190815296517fc6a5026a0000000000000000000000000000000000000000000000000000000081528651861660048201529351851660248501529151604484015290511660648201529251166084830152919250733d4e44eb1374240ce5f1b871ab261cd16335b76a9063c6a5026a9060a4015b6080604051808303816000875af11580156124a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c991906138fb565b50919998505050505050505050565b6000806124e48361206c565b90506124f1868683612a28565b6040517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038881166024830152919091169063f140a35a90604401602060405180830381865afa158015612559573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115969190613384565b600080612589836122b5565b6040805160a0810182526001600160a01b03898116825288811660208301908152828401898152600286810b6060860190815260006080870190815296517f9e7defe6000000000000000000000000000000000000000000000000000000008152865186166004820152935185166024850152915160448401529051900b6064820152925116608483015291925073254cf9e1e6e233aa1ac962cb9b05b2cfeaae15b090639e7defe69060a401612486565b60006126478484612adc565b905060006126558585612c7e565b5050604080516001600160a01b03808916602083015291810186905282151560608201529084166080820152909150829060009060a001604051602081830303815290604052905060006126aa8888886122cb565b90508315612735576040517f022c0d9f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063022c0d9f906126fe9060009085903090889060040161383e565b600060405180830381600087803b15801561271857600080fd5b505af115801561272c573d6000803e3d6000fd5b505050506127af565b6040517f022c0d9f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063022c0d9f906127819084906000903090889060040161383e565b600060405180830381600087803b15801561279b57600080fd5b505af1158015610385573d6000803e3d6000fd5b5050505050505050565b60006127c48261206c565b905060008060006127d58888612c7e565b92509250925060006127e8838387612cb5565b604080516001600160a01b03808d1660208301529181018a90528615156060820152908216608082015290915060009060a001604051602081830303815290604052905060008561285757612852600173fffd8963efd1fc6a506488495d951d5263988d26613942565b612867565b6128676401000276a36001613961565b6040517f128acb080000000000000000000000000000000000000000000000000000000081529091506001600160a01b0384169063128acb08906128b79030908a908e9087908990600401613980565b60408051808303816000875af11580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f991906139bf565b50505050505050505050505050565b60006129138261206c565b905060008584612924888886612a28565b6001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129859190613821565b6001600160a01b0316886001600160a01b0316146129a4898987612a28565b604080516001600160a01b039586166020820152908101939093529015156060830152909116608082015260a00160405160208183030381529060405290506129f08686868585612082565b50505050505050565b6000612a04826122b5565b90506000806000612a158888612c7e565b92509250925060006127e8838387612d24565b6040517f1698ee820000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301528316602482015262ffffff8216604482015260009073420dd381b31aef6683db6b902084cb0ffece40da90631698ee82906064015b602060405180830381865afa158015612ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad49190613821565b949350505050565b6040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152600090738909dc15e40173ff4699343b6eb8132c65e18ec69063e6a4390590604401602060405180830381865afa158015612b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7c9190613821565b9392505050565b6000808411612bd45760405162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e540000000000000060448201526064016101b7565b600083118015612be45750600082115b612c305760405162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f4c49515549444954590000000000000000000060448201526064016101b7565b6000612c3e856103e561378d565b90506000612c4c848361378d565b9050600082612c5d876103e861378d565b612c6791906139e3565b9050612c7381836139f6565b979650505050505050565b6001600160a01b038082169083161060008082612c9b5783612c9d565b845b915082612caa5784612cac565b835b90509250925092565b6040517f1698ee820000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301528316602482015262ffffff821660448201526000907333128a8fc17869897dce68ed026d694621f6fdfd90631698ee8290606401612a93565b6040517f28af8d0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152600282900b6044820152600090735e7bb104d84c7cb9b682aac2f3d509f5f406809a906328af8d0b90606401612a93565b604051806060016040528060008152602001612dbf60408051808201909152600081526060602082015290565b8152602001612ddf60408051808201909152600081526060602082015290565b905290565b508054612df0906133ba565b6000825580601f10612e00575050565b601f01602090049060005260206000209081019061062a91905b80821115612e2e5760008155600101612e1a565b5090565b6001600160a01b038116811461062a57600080fd5b60008083601f840112612e5957600080fd5b50813567ffffffffffffffff811115612e7157600080fd5b602083019150836020828501011115612e8957600080fd5b9250929050565b600080600080600060808688031215612ea857600080fd5b8535612eb381612e32565b94506020860135935060408601359250606086013567ffffffffffffffff811115612edd57600080fd5b612ee988828901612e47565b969995985093965092949392505050565b600060208284031215612f0c57600080fd5b8135612b7c81612e32565b600060208284031215612f2957600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612f8257612f82612f30565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612fb157612fb1612f30565b604052919050565b600067ffffffffffffffff821115612fd357612fd3612f30565b5060051b60200190565b801515811461062a57600080fd5b803561090f81612fdd565b60008060008060008060c0878903121561300f57600080fd5b6130198735612e32565b86359550602087013594506130316040880135612e32565b6040870135935067ffffffffffffffff6060880135111561305157600080fd5b6060870135870188601f82011261306757600080fd5b6130796130748235612fb9565b612f88565b81358082526020808301929160051b8401018b101561309757600080fd5b602083015b6020843560051b8501018110156131995767ffffffffffffffff813511156130c357600080fd5b803584016040601f19828f030112156130db57600080fd5b6130e3612f5f565b60046020830135106130f457600080fd5b6020820135815267ffffffffffffffff6040830135111561311457600080fd5b6020604083013583010191508d601f83011261312f57600080fd5b67ffffffffffffffff8235111561314857613148612f30565b61315c6020601f19601f8535011601612f88565b823581528e60208435850101111561317357600080fd5b82356020840160208301376000602093358201840152818301528452928301920161309c565b5094506131ab91505060808801612feb565b91506131b960a08801612feb565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000815180845260005b8181101561321a576020818501810151868301820152016131fe565b506000602082860101526020601f19601f83011685010191505092915050565b6000815160048110613275577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b80845250602082015160406020850152612ad460408501826131f4565b602081528151602082015260006020830151606060408401526132b8608084018261323a565b90506040840151601f198483030160608501526132d5828261323a565b95945050505050565b600080600080606085870312156132f457600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561331957600080fd5b61332587828801612e47565b95989497509550505050565b6000806000806080858703121561334757600080fd5b843561335281612e32565b935060208501359250604085013561336981612fdd565b9150606085013561337981612e32565b939692955090935050565b60006020828403121561339657600080fd5b5051919050565b6000602082840312156133af57600080fd5b8151612b7c81612fdd565b600181811c908216806133ce57607f821691505b602082108103613407577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b601f8211156105aa57806000526020600020601f840160051c810160208510156134635750805b601f840160051c820191505b81811015613483576000815560010161346f565b5050505050565b815167ffffffffffffffff8111156134a4576134a4612f30565b6134b8816134b284546133ba565b8461343c565b6020601f82116001811461350a57600083156134d45750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455613483565b600084815260208120601f198516915b8281101561353a578785015182556020948501946001909201910161351a565b508482101561357657868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f800000000000000000000000000000000000000000000000000000000000000082036135e5576135e5613585565b5060000390565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b8181101561363e5783516001600160a01b0316835260209384019390920191600101613617565b50506001600160a01b039590951660608401525050608001529392505050565b60006020828403121561367057600080fd5b815167ffffffffffffffff81111561368757600080fd5b8201601f8101841361369857600080fd5b80516136a661307482612fb9565b8082825260208201915060208360051b8501019250868311156136c857600080fd5b6020840193505b828410156115965783518252602093840193909101906136cf565b6000610100820190506001600160a01b0383511682526001600160a01b036020840151166020830152604083015160020b6040830152606083015161373a60608401826001600160a01b03169052565b506080830151608083015260a083015160a083015260c083015160c083015260e083015161377360e08401826001600160a01b03169052565b5092915050565b8181038181111561066957610669613585565b808202811582820484141761066957610669613585565b818103600083128015838313168383128216171561377357613773613585565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137f5576137f5613585565b5060010190565b60006020828403121561380e57600080fd5b815162ffffff81168114612b7c57600080fd5b60006020828403121561383357600080fd5b8151612b7c81612e32565b8481528360208201526001600160a01b038316604082015260806060820152600061159660808301846131f4565b60006020828403121561387e57600080fd5b81518060020b8114612b7c57600080fd5b80516dffffffffffffffffffffffffffff8116811461090f57600080fd5b805163ffffffff8116811461090f57600080fd5b6000806000606084860312156138d657600080fd5b6138df8461388f565b92506138ed6020850161388f565b9150612cac604085016138ad565b6000806000806080858703121561391157600080fd5b8451602086015190945061392481612e32565b9250613932604086016138ad565b6060959095015193969295505050565b6001600160a01b03828116828216039081111561066957610669613585565b6001600160a01b03818116838216019081111561066957610669613585565b6001600160a01b038616815284151560208201528360408201526001600160a01b038316606082015260a060808201526000612c7360a08301846131f4565b600080604083850312156139d257600080fd5b505080516020909101519092909150565b8082018082111561066957610669613585565b600082613a2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ebcb0f390735466b9e8f2cced2787d987d3593cf0553f46d82f676a3486ebb3464736f6c634300081c0033